2012-07-31 57 views
1

好吧,所以我有我的菜單系統,並從JFrame工作。一切似乎都很順利,直到我點擊啓動畫布的按鈕。現在畫布所做的是初始化擴展Canvas的JFrame,所以我不能使用線程。一旦框架啓動並運行,它會調用一個有效的方法,在此之後,我無法關閉框架。使用static void main運行畫布應用程序時,這從來都不是問題。我該如何解決這個新的JFrame不關閉的問題?菜單系統的工作,但不能關閉

+0

,除非你有一個很好的理由不要混用的Swing和AWT組件。爲此,它可能需要'JPanel'而不是'Canvas'。要將概率轉化爲更確切的東西,請提供更多關於用例的詳細信息。 – 2012-07-31 01:37:09

回答

5

我該如何解決這個新JFrame不關閉的問題?

不要阻塞EDT(Event Dispatch Thread) - 當發生這種情況時GUI將「凍結」。對於長時間運行的任務,請執行SwingWorker而不是創建無限循環。有關更多詳細信息,請參閱Concurrency in Swing

0

1.在使用GUI應用程序時,請遵循以下規則:始終將UI工作保持在UI線程上,非UI工作在非UI線程上。

2.DONOT混淆SWINGAWT

在Java GUI中的main()方法不長住調度工作,在事件調度線程(EDT)後main()方法退出。現在它完全負責EDT的以處理GUI。

4.因此,不要將非UI過程密集型工作與EDT混淆。

使用EDT來處理GUI。

如:

public static void main(String[] args){ 


    EventQueue.invokeLater(new Runnable(){ 

       myframe.setVisible(true); 

     }); 


}