Libgdx: 使用 gdx-backend-lwjgl3 和 gdx-tools 依赖项生成 jar 时执行错误

创建于 2017-06-11  ·  3评论  ·  资料来源: libgdx/libgdx

问题详情

当我从具有 gdx-backend-lwjgl3 和 gdx-tools 依赖项的 gdx projet 生成 jar 并尝试运行此 jar 时,出现错误。 当我使用 Gradle 运行时,gdx 应用程序以相同的配置完美运行。

复制步骤/代码

  1. 使用仅适用于桌面的安装程序创建一个新的 gdx 项目
  2. 迁移到 gdx-backend-lwjgl3
  3. 在桌面模块中添加 gdx-tools 依赖项
  4. 做一个./gradlew clean dist
  5. 做一个java -jar desktop/build/libs/desktop-1.0.jar

LibGDX 和/或相关依赖项的版本

1.9.6 具有 gdx-backend-lwjgl3 和 gdx-tools 依赖项

堆栈跟踪

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/lwjgl/system/Callback.<clinit>()V <strong i="19">@136</strong>: invokestatic
  Reason:
    Type 'org/lwjgl/PointerBuffer' (current frame, stack[1]) is not assignable to 'org/lwjgl/system/CustomBuffer'
  Current Frame:
    bci: <strong i="20">@136</strong>
    flags: { }
    locals: { 'org/lwjgl/system/MemoryStack', null, '[Ljava/lang/Class;', '[Ljava/lang/reflect/Method;', 'org/lwjgl/PointerBuffer' }
    stack: { '[Ljava/lang/reflect/Method;', 'org/lwjgl/PointerBuffer' }
  Bytecode:
    0x0000000: b800 364b 014c 04bd 0037 5903 b200 3853
    0x0000010: 4d10 09bd 0039 5903 123a 123b 2cb6 003c
    0x0000020: 5359 0412 3d12 3b2c b600 3c53 5905 123e
    0x0000030: 123b 2cb6 003c 5359 0612 3f12 3b2c b600
    0x0000040: 3c53 5907 1240 123b 2cb6 003c 5359 0812
    0x0000050: 4112 3b2c b600 3c53 5910 0612 4212 3b2c
    0x0000060: b600 3c53 5910 0712 4312 3b2c b600 3c53
    0x0000070: 5910 0812 4412 3b2c b600 3c53 4e2a 2dbe
    0x0000080: b600 453a 042d 1904 b800 46b8 0047 5819
    0x0000090: 04b6 0048 b300 1e19 04b6 0048 b300 1f19
    0x00000a0: 04b6 0048 b300 2019 04b6 0048 b300 2119
    0x00000b0: 04b6 0048 b300 2219 04b6 0048 b300 2319
    0x00000c0: 04b6 0048 b300 2519 04b6 0048 b300 2619
    0x00000d0: 04b6 0048 b300 242a c600 462b c600 132a
    0x00000e0: b600 49a7 003b 4d2b 2cb6 004b a700 322a
    0x00000f0: b600 49a7 002b 4d2c 4c2c bf3a 052a c600
    0x0000100: 1d2b c600 152a b600 49a7 0012 3a06 2b19
    0x0000110: 06b6 004b a700 072a b600 4919 05bf a700
    0x0000120: 0f4b bb00 1459 124d 2ab7 004e bfb8 004f
    0x0000130: 57b1                                   
  Exception Handler Table:
    bci [223, 227] => handler: 230
    bci [6, 215] => handler: 246
    bci [6, 215] => handler: 251
    bci [261, 265] => handler: 268
    bci [246, 253] => handler: 251
    bci [0, 286] => handler: 289
  Stackmap Table:
    full_frame(<strong i="21">@230</strong>,{Object[#149],Object[#150]},{Object[#150]})
    same_frame(@239)
    same_locals_1_stack_item_frame(<strong i="22">@246</strong>,Object[#150])
    same_locals_1_stack_item_frame(<strong i="23">@251</strong>,Object[#150])
    full_frame(<strong i="24">@268</strong>,{Object[#149],Object[#150],Top,Top,Top,Object[#150]},{Object[#150]})
    same_frame(@279)
    same_frame(@283)
    full_frame(<strong i="25">@286</strong>,{},{})
    same_locals_1_stack_item_frame(<strong i="26">@289</strong>,Object[#151])
    same_frame(@301)

    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.initializeGlfw(Lwjgl3Application.java:78)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:87)
    at com.mygdx.lwjgl3.desktop.DesktopLauncher.main(DesktopLauncher.java:10)

请选择受影响的平台

  • [ ] 安卓
  • [ ] iOS (robovm)
  • [ ] iOS (教育部)
  • [ ] HTML/GWT
  • [ ] 窗户
  • [X] Linux
  • [ ] 苹果系统

最有用的评论

这个评论是天赐之物。 对于那些发现这一点的人来说,语法有点不对劲。 尝试将以下内容添加到根级build.gradle文件中的:desktop依赖项中:

compile ("com.badlogicgames.gdx:gdx-tools:$gdxVersion") {
    exclude group: 'com.badlogicgames.gdx', module: 'gdx-backend-lwjgl'
}

所有3条评论

你不能在 dist 上包含带有 lwjgl3 后端的 gdx-tools,它们不兼容。 见https://github.com/libgdx/libgdx/issues/3726

事实上,gdx-tools 项目同时拥有核心、编辑器和测试代码。 编辑器和测试代码基于 Lwjgl 后端。 如果您只需要一些 Lwjgl 不可知类(例如纹理打包器),您可以从 gradle 构建中的 gdx-tools 依赖项中排除 Lwjgl,类似(未测试):

compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion" {
  exclude "com.badlogicgames.gdx:gdx-backend-lwjgl"
}

https://docs.gradle.org/3.3/userguide/dependency_management.html#sub :exclude_transitive_dependencies

这只是一种解决方法,IMO gdx-tools 应该以某种方式拆分。

希望它有帮助。

这个评论是天赐之物。 对于那些发现这一点的人来说,语法有点不对劲。 尝试将以下内容添加到根级build.gradle文件中的:desktop依赖项中:

compile ("com.badlogicgames.gdx:gdx-tools:$gdxVersion") {
    exclude group: 'com.badlogicgames.gdx', module: 'gdx-backend-lwjgl'
}
此页面是否有帮助?
0 / 5 - 0 等级