2011-02-22 63 views
0

我有一個問題:我有一個jframe1誰在ActionPerformed jframe2調用。 JFrames是線程還是?所以我試着在jframe2的wait()方法,然後我就在jframe1通知jframe2的..1.JFrame調用2. JFrame - wait()=>都被阻塞了?

我的代碼在jframe2(點擊按鈕時什麼跑,一種方法):

private void read(){ 

    synchronized(jframe1){ 
     try { 

      if(writer.checkLast() == null){ 
       this.wait(); 
       jLabel.setText(writer.getLast()); 
      } 
      else{ 
       jLabel.setText(writer.getLast()); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 


} 

但問題是,如果我使用this.wait();在jframe2中,我的jframe1也被鎖定了..我做錯了什麼?

sry爲我的英語不好,謝謝如果有人有答案!

回答

1

框架是線程還是?

不,絕對不是。有一個一個所有繪畫和用戶輸入事件發生的單線程事件調度線程。但是,該線程與應用程序的主線程不同,這可能導致您相信每個框架都有自己的線程。

由於所有事件都發生在事件派發線程上,因此您不必進行任何同步,並且您的框架可以調用對方的方法而無需任何同步或通知。這首先是單線程設計的原因(一般認爲多線程GUI幾乎不可能)。

1

我感覺你試圖通過使用wait()方法來模擬模態對話框的行爲,但正如Michael在上面解釋的那樣,不要在Swing組件上調用wait,也不要使用了Thread.sleep。相反,如果你想顯示另一個窗口模態使用JOptionPane或模態JDialog。這些在教程中都有很好的解釋。