我将IDE从Eclipse更改为IntelliJ IDEA。新的开始抱怨我的代码。
public class Controller {
private OknoGlowne frame;
private MenuListener menuListen = new MenuListener(this);
private TabListener tabListener = new TabListener(this);
public OknoGlowne getFrame() {
return frame;
}
public Controller(){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new OknoGlowne();
frame.setVisible(true); //error
frame.addMenuListener(menuListen);
frame.addTabListener(tabListener);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
所以我评论了这一行。并在UI框架的构造函数中添加新行。
public OknoGlowne() {
jPanel.setVisible(true);
}
应用启动,但用户界面不再显示。 IDEA以不同于Eclispe的方式创建框架。我得切换。
主要
public class Runner {
public static void main(String[] args) {
new Controller();
}
}
答案 0 :(得分:0)
这与您的IDE没有任何关系。我打赌如果你在eclipse中运行100次,或者从命令行运行它,你会得到不同的结果,具体取决于系统的繁忙程度。
您没有看到弹出JFrame的原因是因为您使用 invokeLater()而不是 invokeAndWait()。
invokeLater()方法立即返回,此时你处于竞争状态:事件线程会先显示EDT,还是主线程首先退出?如果主线程先退出,那么程序将在显示任何窗口之前退出。
要防止这种情况,您必须使用invokeAndWait()而不是invokeLater()。