2012-12-04 67 views
1

首先它是一個巨大的應用程序,問題涉及到很多行,所以我不能真正附加任何代碼。java/swing:gui凍結,沒有線程掛起

是主要由清算和重新添加元素收集一些改變之後,揮動申請凍結的GUI。在添加的代碼執行後,不會發生這種凍結,但之後會有一段時間。奇怪的是沒有線程被掛起。

我的問題是無限循環是否是這一問題的唯一解釋。我認爲這不太可能,因爲添加的代碼完成沒有問題。 可能有一些不同步的收集訪問問題,但我沒有看到它導致這種情況。它看起來並不像我們正在處理來自同步問題的死鎖,因爲沒有線程被掛起。

+0

您是否嘗試過使用調試器?如果GUI凍結,您應該在事件分派線程中看到一些東西(在Eclipse中,您可以暫停任何線程並查看它當前的位置)。另一種選擇是使用JConsole並查看線程及其當前的堆棧調用。 –

+0

圖形用戶界面凍結...採取線程轉儲,看看什麼是阻止AWT線程 – Robin

+0

這些是好的提示,紀堯姆和羅賓。謝謝。 – Atom

回答

0

它到底是一個僵局

我的領隊告訴我,線程在等待顯示器上(在「同步」)沒有在Eclipse中顯示爲暫停。他找到了兩條線索,並要求暫停。然後我看到他們正在等待對方釋放佔用的顯示器。

死鎖不是我輸入的代碼的錯誤。只是我所做的改變在其他地方顯示了錯誤的同步。

謝謝大家的努力幫助我,我真的很感激。這是我在stackoverflow上的第一個問題,我很驚訝你的反應有多快。

0

這可能是因爲在擺在那裏,在事件調度線程在等待(由於一些重處理)事件被執行。理想情況下,你應該在一個單獨的線程中執行的任何資源密集型任務,以便用戶界面不會凍結

0

您可能已經知道這一點,但只是爲了它的緣故我會說,如果你還沒有使用Swing的工人你在您的應用程序中長時間運行的進程,這將是一個理想的使用它的情況。

+0

這個GUI實現基於監聽器,也使用了swing工作器。我添加的代碼即刻完成。 – Atom