我对自定义 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);
预期的行为是阻止诸如大型机的 MouseEvents
之类的事件并覆盖它。这在 Java 1.7 上完美运行。
所以我的问题是,在创建 JDialogs
时是否需要记住任何特殊的事情,例如仅在父框架(所有者)可见之后创建它,或者它可能是所用的已知错误Java JRE?我已经检查过Oracle的错误修复日志here没有成功。
最佳答案
“我对自定义 JDialog 有问题,它是由主框架在自己的线程中创建的”
如果这确实是真的,那就是问题所在。
您不应该在除事件调度线程之外的任何其他线程上创建 Swing 对象的实例,尤其是 JComponent。 Swing 并不完全线程安全,当您不确定是否处于 EDT 时,请使用 SwingUtilities.invokeAndWait()/invokeLater() 执行 GUI 相关代码。
关于java - JDialog 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151272/