2012-09-29 152 views
0

我正在NetBeans中創建一個服務器客戶端應用程序項目。我使用NetBeans GUI構建器在JFrame上製作了一些Jpanel和其他一些東西(按鈕,textfield,textarea,菜單)。 當我推新服務器按鈕時,整個JFrame及其所有組件都被凍結,但服務器 - 客戶端部分正在後臺工作。我認爲線程有問題, 但我還沒有真正明白我應該做什麼。Java swing組件被凍結

+2

代碼或它沒有發生。 –

回答

6

的問題可能是您的服務器 - 客戶端代碼就是在後臺工作,但Swing事件線程上,而不是工作。你可以用SwingUtilities方法測試這個你知道:SwingUtilities.isEventDispatchThread()

另外:

  • 您是否使用了SwingWorker類做背景的工作?
  • 你是否在做任何帶有後臺線程的join()調用?
  • 你在等SwingWorkers get()方法嗎?

你的代碼的細節可能會幫助我們給你更具體的建議。要了解你應該做什麼,請閱讀,Lesson: Concurrency in Swing

+0

我設法找出了我的問題。我犯了一個愚蠢的錯誤。 當我想啓動服務器線程時,我調用run方法而不是start。這就是爲什麼它被凍結。儘管如此,感謝您的建議。 – user1707095

+0

@ user1707095:我的建議然後是正確的:通過直接調用'run()'你可以在事件線程上調用長時間運行的代碼。 –