我知道如何导出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中运行,我这样做是否正确?
答案 0 :(得分:1)
确保在Event Dispatching Thread中运行UI
EventQueue.invokeLater(new Runnable() {
// Run your code here ...
});
确保您没有在事件调度线程上执行任何耗时的任务,包括睡觉或等待任何锁