【问题标题】:1.JFrame call 2. JFrame - wait() =>both blocked?1.JFrame 调用 2.JFrame - wait() =>都被阻塞了?
【发布时间】:2011-02-22 23:34:15
【问题描述】:

我有一个问题:我有一个 jframe1,他调用 ActionPerformed jframe2。 JFrames 是线程还是?所以我在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也被锁定了..我做错了什么?

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

【问题讨论】:

    标签: java swing jframe wait blocked


    【解决方案1】:

    框架是线程还是?

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

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

    【讨论】:

      【解决方案2】:

      我感觉您正在尝试使用 wait() 方法来模拟模式对话框的行为,但正如 Michael 在上面解释的那样,不要在 Swing 组件上调用 wait 并且不要使用 Thread 。睡觉。相反,如果您想以模态方式显示另一个窗口,请使用 JOptionPane 或模态 JDialog。这一切都在教程中得到了很好的解释。

      【讨论】:

        猜你喜欢
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 2016-01-16
        • 2012-08-02
        • 2013-11-16
        • 2014-11-18
        相关资源
        最近更新 更多