3

有没有人在 IntelliJ 中成功运行过 JBullet 的演示?当我使用 ant 构建脚本运行演示时,我发现了这样的错误:

C:\Users\halin_000\ProgrammingProjects\Java\CS351L\JBullet\build.xml:77: java.lang.IllegalStateException: Stack.alloc(Class) 的第一个参数必须是常量(在 com.bulletphysics.collision.dispatch 类中。 ConvexConcaveCollisionAlgorithm, 方法 processCollision)

你如何解决问题?

4

1 回答 1

1

我今天遇到了同样的问题。几年前我曾经能够构建 jbullet,那时我将源代码置于版本控制之下。

事实证明,使用 Java 7 编译器(来自 jdk1.7.0_79)构建工作正常,而使用 Java 8 编译器(来自 jdk1.8.0_101)构建失败并显示 OP 报告的消息。

我想一个更明确的解决方案是更新 vecmath 库以满足 Java 8 编译器的更高标准,但与此同时,我已将我的工具链恢复到我可以开始的状态。

更新 2016-10-08 22h30 EDT

不满意将我的工具链恢复到 Java7,我对这个问题进行了更深入的研究,并将其追溯到 JStackAlloc,而不是我之前认为的 vecmath。

使用 Java8 编译似乎会在字节码中添加更多以前没有的指令节点。具体来说,LineNumberNodeLabelNode被添加到LdcInsnNodeMethodInsnNode之间。

JStackAlloc 正在寻找后两个节点,但并不期望找到额外的两个节点。很容易修复库以跳过这些额外的节点并在它们存在的情况下继续其工作。

从 jbullet 的maven'ized 构建开始,这里是使它再次工作所需的差异。

请注意,此版本的 Javadoc 版本似乎已损坏。可以通过在pom.xml配置文件中注释掉maven-javadoc-plugin的 jar 目标来禁用它。

于 2016-10-08T23:51:50.920 回答