您好 我正在尝试创建多个JFrame但我希望每个人都拥有自己的Thread(消息循环),所以当一个JFrame冻结时其他人将继续工作
我试图从不同的线程创建每个jframe,但它们仍然在“AWT-EventQueue-0”线程中工作。
我来自dotnet背景。因此,当我想在winForms应用程序中执行此方案时,我通常会调用
Application.run(new form())
来自一个新的线程
你可以告诉我如何在java中这样做吗?
提前感谢!
答案 0 :(得分:2)
无论您打开多少帧,Java中都只有UI线程。我建议你在一个线程中执行长时间运行的操作。
public void actionPerformed(ActionEvent e)
{
new Thread(new FrameRunnable()).start();
}
public class FrameRunnable implements Runnable
{
public void run()
{
// Do stuff here
}
}
希望这会有所帮助。
答案 1 :(得分:1)
阅读Concurrency上Swing教程中的部分,了解Event Dispatch Thread的工作原理。 GUI组件的所有更新必须在EDT上完成。如果您有长时间运行的任务,您可以稍后使用SwingWorker或单独的线程以及SwingUtilities.invoke(...)将代码添加到EDT。
答案 2 :(得分:0)
为生成的每个JFrame创建一个新线程。记下你的Thread变量并在Runnable上传递它。