IDE更改后,UI线程无法启动

时间:2015-05-11 16:48:12

标签: 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 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();
    }
}

1 个答案:

答案 0 :(得分:0)

这与您的IDE没有任何关系。我打赌如果你在eclipse中运行100次,或者从命令行运行它,你会得到不同的结果,具体取决于系统的繁忙程度。

您没有看到弹出JFrame的原因是因为您使用 invokeLater()而不是 invokeAndWait()

invokeLater()方法立即返回,此时你处于竞争状态:事件线程会先显示EDT,还是主线程首先退出?如果主线程先退出,那么程序将在显示任何窗口之前退出。

要防止这种情况,您必须使用invokeAndWait()而不是invokeLater()。