java - 主线程卡住所有其他线程,包括 java gui 线程

标签 java multithreading swing awt sleep

注意:我工作了很多时间并研究了 google 和 stackoverflow,但找不到答案。

我在 JDialog 中使用 Thread.sleep(),它会卡住所有其他 JDialog、JFrame 和线程。

我的示例代码:

public Guitest()
{
    setSize(300,300);


    // create a JDialog that make guitest wait
    MyDialog dlg = new MyDialog();
    dlg.setSize(100,100);
    dlg.setVisible(true);

    while(dlg.isWait())
    {
        try
        {
            Thread.sleep(1000);
        } catch (InterruptedException ex)
        {
            Logger.getLogger(Guitest.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("waiting mydialog");
    }


}


class MyDialog extends JDialog
{
    boolean wait = true;
    JButton btn = new JButton("OK");

    public MyDialog()
    {
        setSize(50,50);

        btn.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                wait=false;
            }
        });
        add(btn);
    }

    public boolean isWait()
    {
        return wait;
    }
}

在这种情况下,JDialog 无法正确显示:

inccorect appear jdialog

但一定是这样的:

true appear jdialog

我该如何解决这个问题。我想让主线程等待另一个线程。有人可以纠正我的示例代码或分享这种情况的示例代码。

最佳答案

恕我直言,看来您只有一个正在运行的线程。首先,我们绘制 JDialog,之后,由于等待标志,您的主线程会 hibernate 。 IE。您无法执行按钮操作监听器,因此无法唤醒线程。

希望有助于理解。

关于java - 主线程卡住所有其他线程,包括 java gui 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34740849/

相关文章:

java - 在android studio中隐藏高度和宽度为零的 View 元素

java - m2e 未检测到本地存储库中的任何 Jar

python - 使用线程和队列时如何处理异常?

java - JCheckBox 数组

java - Mac 小程序 UI 上的组合框问题

Java - 使用多点触控

java - 如何在java中杀死一个线程?

java - JLabels 随机填充

java - 为什么要在 Double-Checked-Locking 中添加第二个测试?

multithreading - intellij-不在多线程代码中的所有断点上停止