新线程中的JDialog没有响应

时间:2011-12-07 15:05:30

标签: java multithreading swing jdialog

我想在另一个线程中创建一个JDialog(将显示时间), 在主线程中,函数将运行..

当我创建对话框时,会显示它,但它被“卡住”......我看不到 它的组成部分......

仅当主线程中的功能完成时 - 对话框才能正确显示..

我该如何解决?

3 个答案:

答案 0 :(得分:1)

如果您在Swing EDT上运行大型任务,那么它将阻止重新绘制UI元素,因为这是所有Swing绘画发生的线程。

唯一合理的解决方法是在单独的线程上运行大型任务。查看SwingWorker课程:http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

答案 1 :(得分:1)

在SwingUtilities.invokeLater或invokeAndWait中调用JDialog创建

答案 2 :(得分:1)

您需要使用awt事件队列来打开它。只是将它放在一个单独的线程上并不符合我的知识

必须在另一个线程上启动Face编辑器,以便JFrame菜单和加速器工作,

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            editFace();
        }
    });

其中editFace()包含要启动并显示新框架的代码

            Viewer2D v = new Viewer2D(this);
            this.addFaceEditor(FaceToEdit, v);
            v.DrawFace(FaceToEdit);
            v.showAndRaise();