![]() |
1
11
这个 FEST 框架有一个工具来检测EDT之外的Swing使用情况。它基本上是一个你安装的重绘管理器。该框架面向测试,但repaitmanager可以在部署时使用。 或者,要检查所有方法(如getter和setter),以便仅在EDT上访问,可以使用AspectJ和加载时编织向swing组件(和JDK swing组件)上的每个方法添加SwingUtilities.isDisaptchThread()建议
|
![]() |
2
2
http://today.java.net/pub/a/today/2005/04/19/desktoplive.html . 正如上面mdma在FEST答案中所暗示的,可以使用定制的repaintmanager,只需重写这些方法
使用
为了检查我们是否使用AWT,您可以通过添加
这里的逻辑是,大多数(但不是所有)Swing操作都会导致重绘,而重绘最终会在repaitmanager中调用这些方法,这样我们就可以捕获这些方法并进行检查。 Alexander Potochkin在这里总结了各种方法: http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html |
![]() |
3
2
从编码的角度,明确区分EDT代码和非EDT代码。避免
断言你在EDT(插入
|
![]() |
4
1
另外,使用 Substance 因为你的LAF将帮助你找出在EDT上没有执行Swing相关的东西的地方。它有适当的检查,以确保任何Swing操作都是在正确的线程上完成的,否则会出现异常而失败。 |