JDialog不可见

时间:2013-11-22 17:48:20

标签: java swing awt visibility jdialog

我遇到自定义JDialog的问题,它是由主框架在自己的线程中创建的。

有时JDialog是不可见的,但它的控件是可点击的(如果你知道它们的位置在哪里)。问题不会发生在Oracle Java 1.7上,而是在Oracle Java 1.6上发生(在 1.6.0_37 1.6.0_45 中看到)。

我创建了这样的对话框:

class MyDialog extends Jdialog() {
 public MyDialog(JFrame frame, boolean modal) {
   super(frame, modal);
   [...]
  }
}

在我的大型机中:

MyDialog dialog = new MyDialog(myMainFrame,true);
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);

预期的行为是阻止大型机{{​​1}}之类的事件并将其置于其上。这完全适用于Java 1.7。

所以我的问题是,在创建MouseEvents之后是否有任何特殊的事情要记住,只有在创建它之后,在父框架(所有者)可见之后或者它可能是使用过的Java JRE的已知错误?我已经检查了Oracle here的错误修复日志,但没有成功。

1 个答案:

答案 0 :(得分:2)

“我有一个自定义JDialog的问题,由主框架在其自己的线程中创建

如果那确实是真的,那就是问题。

您不应该在Event Dispatch Thread之外的任何其他线程上创建Swing对象的实例,尤其是 JComponent 。 Swing不完全是线程安全的,当你不完全确定你是在EDT上时,使用SwingUtilities.invokeAndWait()/ invokeLater()来执行GUI相关的代码。