LWJGL游戏没有正确结束

时间:2012-10-22 01:37:53

标签: java opengl lwjgl

我目前对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);
}

它确实设法读取“运行清理代码”。我的问题是我不知道是否还需要做其他事情来清除所有流程。这个游戏也使用单线程。

2 个答案:

答案 0 :(得分:1)

我认为你的代码完全没有问题。如果您的问题是我认为的问题,您将无法立即解决问题。

以下是您应该问自己的一些基本问题。你用的是什么操作系统?你的Java版本和/或LWJGL版本是什么? (更新它们可能有帮助)你有没有听说过/或玩过一款名为Minecraft的游戏?如果您正在使用Linux并在关闭Minecraft时看到这一点,那么这可能是您遇到的问题。

答案 1 :(得分:0)

我在64位窗口上遇到了同样的问题。当运行时异常(或任何其他未捕获的异常)发生时,应用程序尚未关闭。可能的原因是在一个独立的线程中抛出异常,该异常线程在关闭显示窗口时生效,但所有其他线程仍在工作。我提出了强力解决方案:重写Thread方法。

    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
         @Override
         public void uncaughtException (Thread thread, final Throwable ex) {
            ex.printStackTrace();
            Display.destroy();
            System.exit(0);
         }});

    new LwjglApplication(new StartScreen(application), cfg);