2012-09-20 59 views
1

我有一个在WinXP上运行的Swing GUI。Java Swing GUI重新聚焦时冻结

有时候,当我做别的事情(在网络上冲浪...),然后我想回到我的计划,GUI出现,但完全冻结,我不能做任何事情。

我必须等待(也可以是10秒或5分钟),直到它再次工作。

我发现同样的问题,当我从后面的屏幕保护程序(所以我禁用它)。

该机器不在原因,RAM和处理器水平确定。

你有这非常恼人问题的根源的任何想法?也许重绘问题?

+3

可能线程问题 - 你在运行,可能需要时间和冻结GUI图形用户界面线程任何计算,当你applciation得到重点回来? – assylias

+0

+1评论,如果Swing绘制线程被冻结,那么某些东西正在使用该线程去做它本不应该的事情 – Jack

+0

你的应用程序可能工作,并且做了很多工作......它只是不是基于GUI的它似乎是缓慢/滞后的。正如其他人所说,线索可能是减轻一些驴工作的途径。然而,没有任何代码,很难判断... – RossC

回答

2

可能有多个解释到:

  1. 你的应用程序不会在EDT线程(线程控制界面更新)有些沉重的操作
  2. 有可能以L &错误造成的UI更新问题F或成分(一种罕见的情况下)
  3. GC发生,由于一些内部电话和处理整个应用程序(不太可能)
  4. 一些原生的或旧的JDK问题的应用程序窗口(几乎为0%的机会,这是你的情况下)

通常情况下,第1种解释是有效的,在这种情况下,您应该只查看自己的代码并在单独的线程中提取所有“繁重”操作。

不管怎么说,我不能说什么,没有看到代码更具体的...

+0

实际上,当我从其他人的屏幕回来并且需要重新开始工作的时间时,这种情况通常取决于时间,因为我没有专注于我的计划。如果我不关注我的应用程序,GC不起作用? – caRameL

+1

当需要工作时(例如,内存达到极限)或通过System.gc()直接调用GC时,GC工作。无论如何,这只是一个猜测。当你的应用程序获得焦点时(你可以通过分析或调试应用程序来完成),你必须找出究竟开始运行的是什么 - 否则无法帮助你解决问题。它不太可能是Java问题。 –

+1

还寻找[空异常处理程序](http://stackoverflow.com/q/12487583/230513)和[*初始线程*](http://download.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html)违规。 – trashgod