使用多个JFrame导出JAR

时间:2012-09-28 04:23:14

标签: java jar export

我知道如何导出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();
}

使用EventQueue编辑

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

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

1 个答案:

答案 0 :(得分:1)

确保在Event Dispatching Thread中运行UI

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

确保您没有在事件调度线程上执行任何耗时的任务,包括睡觉或等待任何锁