1.JFrame调用2. JFrame - wait()=>两个都被阻止了?

时间:2011-02-22 23:34:16

标签: java swing jframe wait blocked

我遇到了一个问题:我有一个调用ActionPerformed jframe2的jframe1。 JFrame是线程还是?所以我在jframe2中尝试了wait()方法,然后我会在jframe1中通知jframe2 ..

我在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也被锁定..我做错了什么?

我的英语不好,谢谢,如果有人得到答案的话!

2 个答案:

答案 0 :(得分:1)

  

框架是线程还是?

不,绝对没有。有一个一个单线程,其中所有绘制和用户输入事件都发生,即事件调度线程。但是,这个线程与应用程序的主线程不同,这可能会让你相信每个帧都有自己的线程。

由于所有事件都发生在事件派发线程上,因此您不必进行任何同步,并且您的帧可以调用彼此的方法,而无需任何同步或通知。首先是单线程设计的原因(普遍的共识是多线程GUI几乎不可能使用)。

答案 1 :(得分:1)

我觉得你试图通过使用wait()方法来模拟模态对话框的行为,但正如迈克尔上面解释的那样,不要在Swing组件上调用wait而不要使用Thread 。睡觉。相反,如果要以模态方式显示另一个窗口,请使用JOptionPane或模态JDialog。这些都在教程中得到了很好的解释。