2011-02-22 92 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。这些在教程中都有很好的解释。