3

WindowsXP、JavaバージョンでJNIを使​​用しようとしています:

Java バージョン "1.6.0_13" Java(TM) SE ランタイム環境 (ビルド 1.6.0_13-b03) Java HotSpot(TM) クライアント VM (ビルド 11.3-b02、混合モード、共有)

ネストされたクラスの jclass を取得しようとするとき

jclass c = env->FindClass ("A$B"); (c) をアサートします。

2行目は、Javaのバージョンがわずかに異なるLinux(1.5 ... IIRC)でも同じことが問題なく機能すると主張しています。

私はいくつかの順列を試しました

LA$B; AB LA.B;

しかし、役に立たない。

どんなアドバイスでも大歓迎です。

マーティン

4

2 に答える 2

0

問題はこのスレッドで解決されたようです。

更新: Oracle はフォーラムを移動しました。新しい場所は入れ子になったクラスの署名ですか?

問題がどのように解決されたかは次のとおりです。

わかりました、私はついに問題を見つけました。ネストされたクラスは、別の Java クラス オブジェクト (A$B.class) にコンパイルされます。これは、C/C++ プログラマにとっては少し予期しないことです。ファイルをパッケージ化していないため、クラスは「見つかりません」と報告されました。興味深いことに、Linuxでも機能しました。ご協力いただきありがとうございます!

私からのもう 1 つのヒント: FindClassnull を返す場合は、ただassert推測しないでください。少なくともenv->ExceptionDescribe()、でスタックトレースを取得するための呼び出しstderrenv->ExceptionOccurred()さらに良いことに、呼び出した他の Java メソッドと同じように、スローされた Java 例外をチェックするために使用します。

于 2009-04-13T16:26:32.340 に答える