如何检测Swing线程策略违规

Jus*_*tin 11 java debugging swing multithreading

我正在寻找一种自动方法来检测我的代码中违反Swing的单线程策略.我正在寻找一些类似AOP代码的内容,当你在swing应用程序运行时你将它放入虚拟机中并让它记录在EDT之外修改swing组件的任何地方.

我不是AOP人,但我想在每个java.swing.*类周围创建一个AOP代理

AOP_before(Method m, Object args[]) {
 if (!isEventDispatchThread(Thread.currentThread()) {
  logStack(new RuntimeException("violation!"));
 }

 invoke(m, args);
}
Run Code Online (Sandbox Code Playgroud)

有人知道这样做的项目或实用程序吗?

Tof*_*eer 8

我没有使用过这个特殊的,但是这个CheckThreadViolationRepaintManager应该可以解决这个问题.

它确实需要添加:

RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
Run Code Online (Sandbox Code Playgroud)

然而,你的代码.