2012-09-20 55 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