2010-05-07 174 views
1

我正在使用Swing前端編寫基本的Java應用程序。基本上它通過Apache Cayenne從Derby數據庫加載一些數據,然後將其顯示在JTable中。我正在Eclipse中進行開發,我不認爲這很重要,但我使用Maven進行依賴。Java Swing應用程序在正常模式下運行時掛起,但在調試模式下運行正常

現在這工作正常,當我運行調試但它似乎掛起顯示線程時,我使用運行按鈕。我做了一個線程轉儲,我不是100%確定的,但一切看起來不錯。我使用Java VisualVM,並且線程在那裏看起來很好。

奇怪它似乎間歇性地工作。雖然很容易重現,但它非常一致。如果任何人有任何想法,我都擺脫了他們。

回答

5

它不應該是一個問題,你正在使用Maven或Eclipse的Swing應用程序。我們一直這樣做,沒有任何問題。你說你不是100%,所有的線程都看起來不錯,所以發佈你的線程會很有用,特別是當你的應用程序被掛起時 - 這可能會導致死鎖。

事實上,你說它間歇發生,導致我相信這是一個線程問題。運行調試器可能會導致線程以不同的方式運行,這就是爲什麼它可能在調試模式下工作。 Swing線程問題通常是由於不在事件分派線程上執行GUI更新而導致的,因爲Swing不是線程安全的。任何直接或間接更新擺動組件的操作(意味着它更新表格模型,然後更新表格)必須在事件調度線程上完成

如果您可以縮小正在調用的代碼塊當應用程序凍結時,你應該發佈,如果可以的話,這也會有所幫助。

+1

+1用於事件分派線程。我還建議將默認外觀切換到Substance(https://substance.dev.java.net/),這會強制*在EDT中執行Swing相關的任務,或者應用程序失敗。這對我來說很有用,用於調試。 – 2010-05-07 02:12:56

+0

甜 - 我意識到不同的方式來檢查EDT違規,但不知道有一個外觀和感覺會做到這一點。 – 2010-05-07 02:42:26

+0

雖然我可能不會依賴L&F來強制執行,因爲這個想法是L&F可以插入。對我來說,這聽起來像是對外觀和感覺的責任的侵犯...... – 2010-05-07 02:54:49

相關問題