【问题标题】:Run demo of JBullet in IntelliJ在 IntelliJ 中运行 JBullet 演示
【发布时间】:2015-10-01 17:53:47
【问题描述】:
有没有人在 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)
你是怎么解决这个问题的?
【问题讨论】:
标签:
java
intellij-idea
jbullet
【解决方案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 编译似乎会在字节码中添加更多以前没有的指令节点。具体来说,LineNumberNode 和 LabelNode 被添加在 LdcInsnNode 和 MethodInsnNode 之间。
JStackAlloc 正在寻找后两个节点,但不希望找到额外的两个节点。很容易修复库以跳过这些额外的节点并在它们存在的情况下继续工作。
从maven'ized build of jbullet 开始,这里是make it work again 所需的差异。
请注意,此版本的 Javadoc 版本似乎已损坏。可以通过在 pom.xml 配置文件中注释掉 maven-javadoc-plugin 的 jar 目标来禁用它。