我想在另一个线程中创建一个JDialog(将显示时间), 在主线程中,函数将运行..
当我创建对话框时,会显示它,但它被“卡住”......我看不到 它的组成部分......
仅当主线程中的功能完成时 - 对话框才能正确显示..
我该如何解决?
答案 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();