2

私はJNIアプリケーションに取り組んでいます。これは、いくつかのJavaメソッドを呼び出すCプログラムです。

私はいくつかのインターネットの例に従ってそれを書きました。

最初に、Eclipse Indigoで簡単な例を作成しました(Javaファイルを「デフォルトパッケージ」で作成しました)。次に、Cコードで次のようなものを使用しました。

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin";

すべて正常に動作しましたが、Javaプロジェクトを作り直して、「Funciones」というパッケージにJavaコードを含めるようにしたので、次のように変更しました。

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin/Funciones";

しかし、今は機能しません...クラスパスで間違っていると思いました。

誰かが私を助けてくれますか?

ありがとう。

4

1 に答える 1

3

クラスパスは、パッケージ内jarではなく、使用している最上位パッケージを保持するディレクトリ (またはディレクトリ、またはファイル) を指す必要があります。したがって、コードが次のようにレイアウトされている場合:

~/Funciones/bin/
|
>----Funciones
|    |
|    >----Funciones.class – this is the class Funciones.Funciones
|
>----some other package
|
:

~/Funciones/binクラスパスに追加する必要があります。クラスを見つけるには、その完全修飾名を使用する必要があります。つまり、クラス名にパッケージ名をプレフィックスとして付けたものです。

Class clsFunciones = Class.forName("Funciones.Funciones");

または、JNI では、クラス記述子:

jclass clsFunciones = (*env)->FindClass(env, "Funciones/Funciones");
于 2012-07-09T15:16:49.763 に答える