lwjgl 游戏崩溃时如何显示对话框 (java)

How to show dialog when lwjgl game crashes (java)

我正在使用 LWJGL 制作我的新游戏。

快速提问:

当我的游戏因以下原因崩溃时:

Exception in thread "main" java.lang.NullPointerException at engineTester.MainGameLoop.main(MainGameLoop.java:376) C:\Users\users\AppData\Local\NetBeans\Cache.1\executor-snippets\run.xml:53: Java returned: 1

我如何让它在对话框中打印出来,以便当有人运行它并且它崩溃时,他们将能够将它视为已崩溃的对话框

希望它有意义

您可以使用 try ...catch 并捕获异常(在基类/超类中),向用户发送一个错误代码,他可以报告并记录更详细的错误。取决于您的配置:

 ...
    try {
        /* game is playing() */
    }
    catch (MyGameException gameException) {        
       logging.log(gameException.log());        
       sendErrorCodeToTheUser(gameException);        
    }

我与一位同事进行了类似的讨论,用户可以报告错误代码 1-10 或 1-1000,而程序员可以在空指针所在的位置有详细的日志。

我建议使用 UncaughtHandler 来捕获任何未处理且实际上会导致游戏崩溃的异常。您没有具体说明您使用的是哪个版本的 LWJGL,但是如果您使用的是 LWJGL 2,它有一个 Sys class 可以让您显示警报。

Sys.alert(标题,消息)

不幸的是,LWJGL 3 删除了这个 class 并且 GLFW 目前似乎不支持创建消息框。

设置 UncaughtHandler(Main 方法中的第一行)

Thread.setDefaultUncaughtExceptionHandler(UncaughtHandler.instance);

我的 UncaughtHandler class:

public class UncaughtHandler implements Thread.UncaughtExceptionHandler{
    public static UncaughtHandler instance = new UncaughtHandler();

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        Sys.alert("Uncaught Exception!", e.getMessage());
    }
}

如果您使用的是 lwjgl3,那么您应该使用 TinyFileDialogs binding

尽可能避免摆动