0

この問題に似た例をいくつか調査しましたが、問題の解決策となる例をまだ見つけていません。ネイティブ メソッドを使用して最初のプログラムを実行しようとしています。最初の例ではプログラムをできるだけシンプルにしようとしたため、プログラムをパッケージの階層に格納していません。すべての保存方法は次のとおりです。

NativeDemo というクラスが 1 つあります。C:/JavaFiles/demo/ に保存されます。プログラムをコンパイルすると、.class ファイルがこの同じフォルダーに保存されます。このプログラムで javah コマンドを実行しようとすると、クラス ファイルが見つからないというメッセージが表示されます。私が間違っていることを教えてください。

私のjavahコマンドは私のJDKに保存されており、次のように保存されています: C:/jdk1.0.7_04/bin/

コマンド プロンプトのコマンド ラインで、次のように入力します。

C:\JavaFiles\demo>C:\jdk1.7.0_04\bin\javah -jni NativeDemo も試しました C:\JavaFiles\demo>C:\jdk1.7.0_04\bin\javah.exe -jni NativeDemo

これを行うと、クラスファイルが見つからないことがわかります。これは、コンパイル時に使用されたのと同じパスであり、問​​題なくファイルが見つかり、コンパイルされ、.class ファイルが作成されました。

助けてください。ありがとう。

4

5 に答える 5

5

クラスパスを設定するには、おそらく-classpathコマンドラインでパラメーターを指定する必要があります。javah( の-classpathパラメーターjavahは、他の Java ツール (java、javac、javap など) の場合と同じように動作します。クラスパスを理解していない場合は、このページこのページを読んでください。)

于 2012-06-30T02:27:11.977 に答える
1

解決策が追加されなかったので、私が見つけた解決策をこの問題に貢献すると思いました。100% ユーザー エラーだったので、それ自体は解決策ではありませんでした。

同様の状況のように聞こえますが、私は、JNI の使用法を示す簡単な小さなプロジェクトを作成したいと考えていました。これは簡単な演習として設計されたので、IDE を気にせず、vi を使用してコードを記述し、javac を使用してコンパイルしました。

例えば

myclass.java (完全修飾クラス名は mypackage.myclass です)

javac myclass.java

上記のコマンドは、myclass.class を現在のディレクトリに出力します。現在の作業ディレクトリに myclass.java と myclass.class があります。

javah mypackage.myclass を実行すると、説明されているエラーが発生します。

ここでの問題は、javac の使用です。コンパイルされたクラスを現在のディレクトリに書きましたが、javah は "/mypackage/myclass.class" でそれを探しています。

ばかげた小さな答えでばかげた小さな問題ですが、今日はこれで 15 分を無駄にすることにかなりイライラしていたので、他の誰かが同じ痛みを和らげることができれば幸いです (そして、はい、私はそれをもっと早く見つけるべきだったと知っています。 hotspot と gnuj Java の実装の間で System.load の不一致を見つけるのに数時間費やしました。

于 2013-10-03T08:58:42.160 に答える
0

Android Studio 1.5で同じ問題が発生し、上記のコマンドを実行しましたが、何も実行しませんでした。アプリモジュールのビルドフォルダーを調べましたが、中間フォルダーにクラスフォルダーがなかったため、コマンドを実行してプロジェクトを作成する前に、ビルド>プロジェクトの作成またはショートカットキーCtrl+ F9、次に上記のコマンドを実行します

于 2016-03-22T18:44:58.587 に答える
0

クラスには完全修飾名を使用する必要があります。javah の構文はjavah [options] classesです。クラスは完全修飾名で指定されます。したがって、あなたの場合、パッケージがdemoの場合、コマンドは次のようになります。

C:\JavaFiles\demo>C:\jdk1.7.0_04\bin\javah -classpath . demo.NativeDemo

クラスパスは . あなたが述べたように、現在のディレクトリに .class ファイルがあるためです。-jni オプションは必要ありません。デフォルトであるためです。

于 2013-12-04T13:36:33.197 に答える