1

我知道如何导出 Jar 文件并且以前有很多次。在我当前的项目中,我能够完美地导出和运行它,但是只要我在单击按钮加载它时将另一个 JFrame 添加到项目中,JFrame 就不会加载,而是 JAR 只是冻结。不会崩溃或任何东西,只是冻结。这是个常见的问题吗?可以做些什么来修复它?

第一个 JFrame

JFrame frame = new JFrame();

public Launcher(int id) {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }
    frame.setUndecorated(true);
    frame.setTitle("Launcher");
    frame.setSize(new Dimension(width, height));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(this);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);
    window.setLayout(null);

打开第二个 JFrame 的代码

if (Input.Clicked == 1) {
    config.loadConfig("res/Config/config.xml");
    frame.dispose();
    new NewLauncher();

}

NewLauncher() 的代码

    public NewLauncher() {

    Display app = new Display();
    JFrame frame = new JFrame();
    frame.add(app);
    frame.setSize(Display.getGameWidth(), Display.getGameHeight());
    frame.getContentPane();
    frame.setTitle(Display.TITLE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    game.start();
    stopMenuThread();
}

用事件队列编辑

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable()
    {
       public void run()
       {
        new Launcher(0);
       }
    });
    //new Launcher(0);
}

代码在调试器和编译器中运行良好。仍然无法在 Jar 中运行,我这样做是否正确?

4

1 回答 1

1

确保您在事件调度线程中运行 UI

EventQueue.invokeLater(new Runnable() {
 // Run your code here ...
});

确保您没有在 Event Dispatching Thread 上执行任何耗时的任务,包括休眠或等待任何锁

于 2012-09-28T04:56:15.710 回答