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 月 8 日 22 時 30 分 EDT

ツールチェーンを Java7 に戻すことに満足できなかったので、この問題をもう少し詳しく調べて、以前考えていた vecmath ではなく、JStackAlloc にたどり着きました。

Java8 でコンパイルすると、以前にはなかったバイトコードに命令ノードが追加されるようです。具体的には、LdcInsnNodeMethodInsnNodeの間にLineNumberNodeLabelNodeが追加されています。

JStackAlloc は後の 2 つのノードを探していますが、余分な 2 つのノードが見つかることを期待していません。ライブラリを修正して、これらの余分なノードをスキップし、それらの存在にもかかわらずそのジョブを実行するのは簡単です。

jbullet の maven 化されたビルドから始めて、これを再び機能させるために必要な diffを次に示します。

このリリースの Javadoc ビルドは壊れているようです。pom.xml設定ファイルのmaven-javadoc-pluginのjar ゴールをコメントアウトすることで無効にできます。

于 2016-10-08T23:51:50.920 に答える