Java IDE更改后无法启动UI线程
我将IDE从Eclipse更改为IntelliJ IDEA。新的开始抱怨我的代码Java IDE更改后无法启动UI线程,java,eclipse,swing,intellij-idea,jframe,Java,Eclipse,Swing,Intellij Idea,Jframe,我将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
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);
}
应用程序启动,但UI不再显示。IDEA以不同于Eclispe的方式创建框架。我得换一下
主要
这实际上与您的IDE没有任何关系。我打赌,如果您在eclipse中或从命令行运行它100次,您将根据系统的繁忙程度得到不同的结果 您没有看到JFrame弹出的原因是您使用的是InvokeRelater而不是invokeAndWait invokeLater方法立即返回,此时您处于竞争状态:事件线程将首先显示EDT,还是主线程将首先退出?如果主线程先退出,那么程序将在显示任何窗口之前退出
要防止这种情况,必须使用invokeAndWait而不是invokeLater 你看到了什么错误?如果您通过命令行而不是IDE编译会发生什么?我在编译或运行时没有任何错误。应用程序启动和关闭过程已完成,退出代码为0。我没有看到主方法。你能发布一个吗?@GarryMoveOut这是线程问题。它与您的IDE无关。事实上,eclipse看起来像是以某种方式运行,这是巧合,或者是eclipse使用了与IntelliJ不同的CPU时间。尝试从命令行运行而不运行其他命令,然后尝试从命令行运行,同时使系统尽可能繁忙。无论哪种方法,解决方案都是一样的:使用invokeAndWait而不是invokeLater。我更改了它,窗口仍然不会弹出。立即启动和关闭应用程序`进程已完成,退出代码为0`@GarryMoveOut请提供一个更新的代码。确保它包含所有内容,并编辑您的问题以将其包含在内。
public class Runner {
public static void main(String[] args) {
new Controller();
}
}