我在 NetBeans 中使用 Java、Swing,并且有主 JFrame 和一些 JDialog 窗口。
我单击一个按钮并创建 JDialog,但打开此 JDialog 后的所有代码都会立即执行。但我希望它在 JDialog 关闭时执行(JDialog 是模态的,它会阻止主框架,但不会阻止其代码)。
示例:
private void buttonActionPerformed(java.awt.event.ActionEvent evt)
{
button.setText("Starting");
About.main(null);
button.setText("Ending");
}
现在:单击按钮后,它会打开 JDialog 并且按钮上的文本为“结束”。
但我想要:要单击按钮,它应该有文本“开始”,然后 JDialog 应该出现,但现在,在它关闭后,“结束”应该是标题。
怎么做?
最佳答案
正如您所说,您正在使用 netbeans,当生成的 main 方法将对象创建包装为 SwingUtilities#invokeLater 时,这意味着此代码将在处理所有挂起的 AWT 事件后发生。因此,当您的 System.out.println("end")
处于某个事件中时,您的另一个事件将在前一个事件完成后执行!,这就是您在控制台中看到打印“end”的原因。
我不知道使用另一个主要方法而不是像普通方法一样为整个应用程序使用主要方法是否是一个好的设计。
IMO 我只是会使用,或者制作自己的“构建器”方法,因为 netbeans 生成也再次设置 L&F。
因此,为了解决您的问题,只需使用或创建您自己的构建器方法,而不用 invokeLater
包装它。
new MyDialog(null,true).setVisible(Boolean.TRUE); //may be not null 1st arg and a Frame or use SwingUtilities.windowForThisComponent(mycomponent);
关于java - 在 Java 中执行代码之前等待模态对话框关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826314/