【问题标题】:How to show dialog when lwjgl game crashes (java)lwjgl游戏崩溃时如何显示对话框(java)
【发布时间】:2016-04-24 19:58:24
【问题描述】:

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

快速提问:

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

线程“main”中的异常 java.lang.NullPointerException 在engineTester.MainGameLoop.main(MainGameLoop.java:376) C:\Users\users\AppData\Local\NetBeans\Cache\8.1\executor-sn-ps\run.xml:53:Java 返回:1

我如何让它在对话框中打印,这样当有人运行它并且它崩溃时,他们将能够看到它作为一个已经崩溃的对话框

希望有道理

【问题讨论】:

  • 其他使用 LWJGL 的游戏在 OGL 不工作时使用 Swing。只需显示一个带有信息的 Swing 对话框。我认为您也应该使用日志记录;导出日志文件供您查看将包含更多信息,您可以将其放入一个小对话框中。

标签: java dialog lwjgl


【解决方案1】:

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

Sys.alert(标题,消息)

很遗憾,LWJGL 3 删除了这个类,GLFW 目前似乎不支持创建消息框。

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

Thread.setDefaultUncaughtExceptionHandler(UncaughtHandler.instance);

我的 UncaughtHandler 类:

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());
    }
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      如果可以的话,避免摇摆

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多