【发布时间】:2012-10-22 01:37:52
【问题描述】:
我目前对 LWJGL 有一个简单的问题。如果我要运行我的游戏,它实际上会正确运行所有内容并且似乎正确关闭,但是当我查看任务管理器时,我注意到我的游戏在关闭后占用了 25% 的 CPU(大约 2-实际运行时为 3%),我想我可能在结束应用程序时遗漏了一些东西。
我的主要功能代码:
public static void main(String[] args){
try {
init();
}catch(LWJGLException e){
System.out.println("LWJGLException\n");
e.printStackTrace();
}
try{
gameLoop();
}catch(Exception ex){
ex.printStackTrace();
}finally{
cleanup();
}
}
清理:
public static void cleanup(){
System.out.println("Running cleanup code.");
Display.destroy();
System.exit(0);
}
它确实可以读取“运行清理代码”。我的问题是我不知道是否需要做其他事情来清除所有进程。这个游戏也是单线程的。
【问题讨论】:
-
我强烈建议您尽量避免使用
System.exit()。这会打乱您的应用程序的正常终止。当您通过System.exit()强制终止而不是正常终止时,也许您不允许 LWJGL 正确关闭其所有资源。例如,即使你自己只使用单线程代码,谁说 LWJGL 没有在后台使用多线程,需要在终止前由 JVM 自动清理(而不是由你的代码显式清理)?试试看。 -
我已经尝试过您的建议,但似乎仍然存在问题。我假设 LWJGL 或 OpenGL 有一些东西需要明确结束,我不知道。
-
很抱歉听到它仍然没有解决问题。但是,我坚信在 Java 应用程序中使用
System.exit()通常是个坏主意。祝你好运。 -
另一方面,
System.exit()是确保没有非守护线程阻止您的应用程序退出的唯一方法。 -
我已从代码中删除 System.exit()。我仍然会在某个时候尝试搜索我的问题。显然这不是什么大问题,因为我是唯一一个得到它的人。如果我将我的游戏版本提供给其他人,他们的任务管理器会显示它已被正确删除。