如何调试冻结Windows的Java swing应用程序?

时间:2012-10-02 19:06:09

标签: java windows swing freeze

我正在开发独立(Swing)Java EE客户端。应用程序服务器是JBoss 6.1.0。一些Windows工作站在客户端运行时冻结,有些则不会。 32位和64位Windows工作站都冻结了,而且一些32位和64位Windows工作站再次完美运行。客户端在Linux上运行良好,没有任何问题。

我已按照StackOverflow的说明操作,人们建议禁用-Dsun.java2d.noddraw=true的直接绘制。它没有帮助。

最令我困惑的是,有些工作站几乎完全相同 - 相同的Windows版本,相同的图形驱动程序,相同的JRE,但有些工作正常,有些则没有。

应用程序使用Preferences API来存储dockables的各种位置(来自Docking Frames项目),它使用JBoss客户端类。

我正在调查是否可能并发访问Windows注册表导致此问题(如果您遇到类似问题请告诉我)...

首先猜测是在GUI线程的某处发生竞争条件,并且GUI冻结。但这只会冻结GUI,它不应该冻结整个Windows。

机器一旦冻结,就响应ping,但没有Windows服务。

我希望任何提示可以帮助我解决问题。

修改

  • CPU使用率始终在10%左右。
  • 线程数永远不会超过30,但并非所有线程都是守护程序线程(包括AWT线程,RMI线程等)。

2 个答案:

答案 0 :(得分:1)

试用EventQueue with Watchdog。您在应用程序中安装备用EventQueue。看门狗会告诉您哪些事件会锁定您的GUI。

答案 1 :(得分:0)

原来是ESET。在安装了ESET的每台Windows计算机上,我遇到了这个问题。显然,ESET具有默认启用的“协议跟踪”功能。一旦关闭,我们从未遇到过这个问题。