【问题标题】:LWJGL Game not properly endingLWJGL 游戏没有正确结束
【发布时间】: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()。我仍然会在某个时候尝试搜索我的问题。显然这不是什么大问题,因为我是唯一一个得到它的人。如果我将我的游戏版本提供给其他人,他们的任务管理器会显示它已被正确删除。

标签: java opengl lwjgl


【解决方案1】:

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

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

【讨论】:

  • 我正在运行 Windows。我的世界似乎也没有给我这个问题。因为我是唯一一个似乎拥有它的人,所以我不必担心它。我确实认为这可能是我的 java 安装。我的java很时髦。我得看看那个。
【解决方案2】:

我在 64 位 Windows 上也遇到过同样的问题。发生运行时异常(或任何其他未捕获的异常)时,应用程序尚未关闭。可能原因是在一个独立线程中引发了一个异常,该异常影响了关闭显示窗口,但所有其他线程仍在工作。我想出了蛮力解决方案:覆盖 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);

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多