1

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)
4

1 に答える 1

0

私は問題を解決しました。JVMのパラメーターを本当に間違えました。古いライブラリには、私が知らなかった別のjarライブラリが必要です。だから私はクラスパスにライブラリを追加しました、そしてそれはうまく機能します。何も言わないという本当にばかげた例外は、私を間違った方法で問題を探すようにさせました。

コメントありがとうございます

于 2013-02-10T12:53:47.140 に答える