java - JDialog 不可见

标签 java swing awt visibility jdialog

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

有时,JDialog 是不可见的,但其控件是可单击的(如果您知道它们的位置)。该问题不会出现在 Oracle Java 1.7 上,但肯定会出现在 Oracle Java 1.6 上(参见 1.6.0_371.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/

相关文章:

java - 使用用户输入在命令行中运行java项目

java - 如何在不调整图像大小的情况下压缩PDF?

java - SWING - JTable 单元格中的多个 JCheckBox

java - JScrollPane 阻止与内容交互

java - 为什么这个简单的循环会导致我的 JFrame 出现问题行为

java - 如何在项目中应用Framework?

java - 将类类型信息保存到文件以备后用

java - 通过单击滚动条上的空白区域禁用滚动功能

java - 当 USB 端口扫描某些输入时,Java 中的弹出窗口

java - Spring Boot 集成测试因 java.awt.HeadlessException 失败