JNI を使用して、外部システムの .jar ライブラリから Java メソッドを呼び出しています。私の問題は、ライブラリを使用する単純な Java プログラムを作成するとすべてが正常に機能することですが、JNI を介して同じコードを実行すると、String から Integer を解析するときにライブラリが Null 例外をスローします。JNI経由で正常に動作する同じインターフェースを備えた新しいバージョンのライブラリがあるため、JNIコードに問題はないと確信しています。残念ながら、外部システムとの互換性の問題により、古いバージョンを使用する必要があります。
問題は、jvm.dll が VM を作成する方法にあると思います。おそらく、VM を作成するときに jvm.dll に渡す必要があるいくつかの引数が欠落しています。問題がどこにあるのか誰にもわかりませんか?
コードを投稿することはできませんが、例で説明することはできます。コンストラクタ - 簡単なプログラムを書くとき
import java.lang.reflect.*;
public class Basic
{
public static void main(String[] args)
{
Router = new Router(10);
}
}
両方のライブラリで動作します。
JNI経由で新しいライブラリ2で同じコードを実行すると、それも機能します。しかし、ライブラリ 1 を使用して JNI 経由でコードを実行すると、次の内部例外が原因でクラッシュします。
Error message: System.Exception: JAVA Exception: java.lang.NullPointerException
at com.coda.core.types.TypeNumber.parseNumber(TypeNumber.java:403)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:123)
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:137)
at com.coda.core.Options.setOption(Options.java:138)
at com.coda.core.Options.set(Options.java:85)
at com.coda.core.configuration.ConfigurationLoader.getConfiguration(ConfigurationLoader.java:144)
at com.coda.xml.Configuration.init(Configuration.java:453)
at com.coda.xml.Configuration.init(Configuration.java:370)
at com.coda.xml.router.AppServer.<init>(AppServer.java:250)
at com.coda.xml.router.Router.<init>(Router.java:122)