作为大型应用程序的一部分,我正在编写一个设置类,用于收集和存储用户定义的设置。此类是单例,并在应用程序启动期间实例化。
为了接受用户输入,在 ConfigSettings.java 中通过公共(public)静态方法 selectSettings() 实例化了两个不同的 GUI 框架。两者都是 JFrame 的子类。下面是文件选择对话框实例化的代码:
private void selectFile() {
SelectFileGUI fileSelector = new SelectFileGUI();
fileSelector.setVisible(true);
synchronized(this) {
try {
wait();
} catch(Exception e) {
e.printStackTrace();
}
}
fileSelector.dispose();
}
这在应用程序最初运行时工作正常。但是,稍后用户可能会更改他们选择的设置,包括选择新的源文件。这是通过再次调用 selectSettings() 来完成的。
我遇到的问题是,任何后续尝试再次实例化和显示这些 GUI 组件都会导致显示新的 JFrame,但背景为灰色,并且不显示任何按钮或其他组件。在调试时,我也无法直接创建 SelectFileGUI 的新实例。
是什么导致了这种行为?
最佳答案
我会检查您第二次调用它时是使用 GUI 线程还是从您自己的线程之一调用。
在该方法的顶部,您可以对其进行测试(AWT 线程很容易通过名称识别)并让它抛出异常,以便开发人员知道不要在错误的线程上调用它——或者您可以阻止他们的线程并在工作线程中执行。
关于java - JFrame 在第一次实例化后不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181201/