LibGDX App挂在initializGlfw()上

时间:2017-06-15 00:18:22

标签: java libgdx lwjgl glfw

我注意到最近当我运行LibGDX游戏时,启动需要20秒,这很奇怪,因为我只加载了一些资源。我在我的主要方法中设置了断点,以确定应用程序卡在哪里,并且当我调用此行时,它被卡住了:

new Lwjgl3Application(new GdxGame(), config);

在Lwjgl3Application构造函数中,它挂在此方法调用上:

initializeGlfw();

看起来像这样:

static void initializeGlfw() {
        if (errorCallback == null) {
            Lwjgl3NativesLoader.load();
            errorCallback = GLFWErrorCallback.createPrint(System.err);
            GLFW.glfwSetErrorCallback(errorCallback);
            if (!GLFW.glfwInit()) {
                throw new GdxRuntimeException("Unable to initialize GLFW");
            }
        }
    }

在此方法中,它会卡在createPrintGLFW.glfwInit()上。打印方法如下所示:

public static GLFWErrorCallback createPrint(PrintStream stream) {
        return new GLFWErrorCallback() {
            private Map<Integer, String> ERROR_CODES = APIUtil.apiClassTokens((field, value) -> 0x10000 < value && value < 0x20000, null, GLFW.class);

            @Override
            public void invoke(int error, long description) {
                String msg = getDescription(description);

                stream.printf("[LWJGL] %s error\n", ERROR_CODES.get(error));
                stream.println("\tDescription : " + msg);
                stream.println("\tStacktrace  :");
                StackTraceElement[] stack = Thread.currentThread().getStackTrace();
                for ( int i = 4; i < stack.length; i++ ) {
                    stream.print("\t\t");
                    stream.println(stack[i].toString());
                }
            }
        };
    }

所有这些方法都来自Lwjgl库。有谁知道为什么我的应用可能会遇到这些方法调用?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,它接缝与您所在的机器相关联。我用GLFW制作了一个干净的VS15解决方案,并在几台不同的PC上运行它,发现只有我的桌面有这个问题。我还测试了GLFW的LWJGL结合并得到了相同的结果。

[编辑]等待发生在glfwInit()调用

{{1}}

我在openGL论坛上发现了一篇存档post的帖子,提到了与此类似的问题,但它相当陈旧,可能指的是一个稍微不同的问题。

我可以建议您检查是否从任何防病毒软件中排除了构建文件夹,有时他们会将生成的可执行文件视为潜在威胁,因此可能会很慢,但我不相信这是您的问题。

可悲的是,唯一对我有用的选择是干净安装Windows,虽然当我连接VR耳机并在几天后重新出现时,这个bug神秘地停止了。希望你有比我更好的运气,不必清理安装你的操作系统,如果你找到一个不那么麻烦的解决方案,一定要传播这个词。