我阅读到如果我的JFrame使用DISPOSE_ON_CLOSE作为默认关闭操作,则可能会出现问题,但实际上并没有。它使用DO_NOTHING_ON_CLOSE(隐式)。此外,在释放所有对象后,我明确调用System.exit(0)。
f = new JFrame("Pacman");
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// Terminate the Game-loop:
GameLoop.INSTANCE.stopLoop();
// Close the application:
System.exit(0);
}
});
我猜关闭应用程序时可能会抛出异常,但我找不到一种方法来获取使用JNLP启动的运行中应用程序的控制台输出(例如堆栈跟踪)。下面是我尝试过的方法:
- 使用调试参数启动
javaws
,并使用jconsole
进行连接(可以工作,但我找不到任何异常或控制台输出)。 - 使用调试参数启动
javaws
,并将IntelliJ调试器附加到它(也可以工作,但没有给我任何输出)
try { GameLoop.INSTANCE.stopLoop(); } catch(Exception e) { e.printStackTrace(); /* 可以弹出一个JOptionPane进行调试 */ } // 关闭应用程序: System.exit(0);
- Andrew ThompsonGameLoop.INSTANCE.stopLoop()
的代码吗?从这个方法的名字来看,我认为可能会调用wait()
或者Thread#join()
方法,导致无限等待某些原因。调试这个方法也是一个好主意。 - npeThread
类,而是使用了执行器框架。因此,没有join()
或wait()
调用。你可以在这里找到整个类(以及整个项目)链接。 - Lukas KnuthJOptionPane
。 - Lukas Knuth