java LibGDX应用程序挂起在initializeglfw()上
我注意到,最近当我运行LibGDX游戏时,启动需要20秒,这很奇怪,因为我只加载了一些资源。我在我的主要方法中设置了断点,以确定应用程序被卡住的位置,当我拨打这条电话时,它被卡住了:
new Lwjgl3Application(new GdxGame(), config);
在LWJGL3应用程序构造函数中,它挂起此方法调用:
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");
}
}
}
在这种方法中,它会卡在createPrint
和GLFW.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 楼答案
我也遇到过同样的问题,需要将其绑定到您所在的机器上。我用GLFW制作了一个干净的VS15解决方案,并在几台不同的PC上运行,发现只有我的台式机有这个问题。我还测试了GLFW的LWJGL结合,得到了相同的结果
[EDIT]等待发生在glfwInit()调用中
我在openGL论坛上看到了一篇归档的post帖子,其中提到了一个类似的问题,但它相当古老,可能指的是一个稍微不同的问题
我可以建议你检查一下,你的构建文件夹是否被排除在任何杀毒软件之外,有时他们会将生成的可执行文件视为潜在威胁,因此可能会很慢,但我不认为这是你的问题
可悲的是,对我来说唯一有效的选择是干净地安装windows,尽管当我连接虚拟现实耳机并在几天后再次出现时,这个漏洞神秘地停止了显现。希望你的运气比我好,不必清洁安装你的操作系统,如果你找到一个不那么麻烦的解决方案,一定要传播出去