Java 1.JFrame调用2。JFrame-wait()=>;都被封锁了?

Java 1.JFrame调用2。JFrame-wait()=>;都被封锁了?,java,swing,jframe,wait,blocked,Java,Swing,Jframe,Wait,Blocked,我遇到了一个问题:我有一个jframe1,它调用jframe2。 JFrames是线程还是线程?我在jframe2中尝试了wait()方法,然后我会通知jframe1中的jframe2 jframe2中的我的代码(单击按钮时运行的方法): 但问题是,如果我使用这个;在jframe2中,我的jframe1也被锁定。。我做错了什么 感谢我糟糕的英语,如果有人有答案,谢谢 框架是线还是线 不,绝对不是。所有绘制和用户输入事件都发生在一个线程中,即事件调度线程。但是,该线程与应用程序的主线程不同,这可能

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

jframe2中的我的代码(单击按钮时运行的方法):

但问题是,如果我使用这个;在jframe2中,我的jframe1也被锁定。。我做错了什么

感谢我糟糕的英语,如果有人有答案,谢谢

框架是线还是线

不,绝对不是。所有绘制和用户输入事件都发生在一个线程中,即事件调度线程。但是,该线程与应用程序的主线程不同,这可能使您相信每个框架都有自己的线程


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

我感觉您试图通过使用wait()方法模拟模式对话框的行为,但正如Michael在上面解释的那样,不要调用Swing组件上的wait,也不要使用Thread.sleep。相反,如果您想以模态方式显示另一个窗口,请使用JOptionPane或模态JDialog。在教程中都有很好的解释

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();
        }
    }


}