在新线程中创建JFrame(新的messageloog)

时间:2010-12-31 18:30:08

标签: java multithreading swing

您好 我正在尝试创建多个JFrame但我希望每个人都拥有自己的Thread(消息循环),所以当一个JFrame冻结时其他人将继续工作

我试图从不同的线程创建每个jframe,但它们仍然在“AWT-EventQueue-0”线程中工作。

我来自dotnet背景。因此,当我想在winForms应用程序中执行此方案时,我通常会调用 Application.run(new form()) 来自一个新的线程

你可以告诉我如何在java中这样做吗?

提前感谢!

3 个答案:

答案 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上传递它。