gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:12 29 4
gpt4 key购买 nike

注意:我工作了很多时间并研究了 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com