我正在寻找一种自动方法来检测代码中是否违反了Swing的单线程策略。我正在寻找一些在Swing应用程序运行时放入VM的AOP代码,并记录在EDT外部修改Swing组件的任何位置。
我不是AOP专家,但我可以想象围绕每个java.swing。*类创建一个AOP代理,如下所示:
AOP_before(Method m, Object args[]) { if (!isEventDispatchThread(Thread.currentThread()) { logStack(new RuntimeException("violation!")); } invoke(m, args); }
有人知道这样做的项目或实用程序吗?
我没有使用过这个特定的工具,但是这个CheckThreadViolationRepaintManager应该可以解决问题。
它确实需要添加:
RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
到您的代码。