【发布时间】:2012-09-20 13:11:33
【问题描述】:
我有一个在 WinXP 上运行的 Swing GUI。
有时,当我做其他事情(在网上冲浪......)然后我想回到我的程序时,GUI 出现但完全冻结,我无法对其执行任何操作。
我必须等待(可能是 10 秒或 5 分钟),直到它再次起作用。
当我从屏幕保护程序回来时,我注意到了同样的问题(所以我禁用了它)。
机器故障,RAM 和处理器级别正常。
您知道这个非常烦人的问题的根源吗?可能是重绘问题?
【问题讨论】:
-
可能是线程问题 - 您是否在 GUI 线程中运行任何可能需要时间的计算并在您的应用重新获得焦点时冻结 GUI?
-
+1 评论,如果 Swing 绘制线程被冻结,那么某些东西正在使用该线程做不应该做的事情
-
您的应用程序可能正在工作,并且做了很多工作......它只是不是基于 GUI,所以它看起来很慢/滞后。正如其他人所说,线程可能是减轻一些驴工作的方式。但是,根本没有任何代码很难判断...
-
我已经分离了定期执行一些操作的线程。除此之外,动作仅由侦听器设置。我从未指定我的应用程序在重新获得焦点时运行某些代码。
-
下次遇到这种情况时,请进行线程转储(或多个),以便您至少知道应用程序在做什么(尤其是 EDT 在做什么)。例如
jstack允许进行线程转储
标签: java swing concurrency freeze event-dispatching