44

指示:

javah -jni JavaHowTo

結果:

error: cannot access JavaHowTo 
class file for JavaHowTo not found

javadoc: error - Class JavaHowTo not found.
Error: No classes were specified on the command line.  Try -help.

クラスパスを正しく設定しましたが、それでもこのjavahエラーが発生します。

これに対する解決策は非常に役立ちます。

4

14 に答える 14

13

以下は私にとってはうまくいきました(Win7):

javah -classpath bin/classes -jni -d jni com.my.javaclass

これをアプリのメイン ディレクトリから実行します。

問題はサブディレクトリクラスにありました

于 2012-04-01T15:04:04.440 に答える
11

次のオプションを使用して、ビルドスクリプトから毎日javahを正常に使用しています。

javah -d <outputdir> -classpath <classpath> <fully_qualified_class>

どこ:

'outputdir' is the directory where to put the generated header file

'classpath' contains an absolute path to the directory containing your root package (as mentionned by Glen)

'fully_qualified_class' is the name of the class containing native methods without .class extension

-jniオプションは必要ありません(デフォルトで設定されています)

とにかく、クラスファイルが生成されていることを確認する必要があります。javadocエラーが発生することにも非常に驚いています...

于 2009-06-12T13:20:48.920 に答える
9

同じエラーが発生し、http://www.inonit.com/cygwin/jni/helloWorld/header.htmlリンクを使用して .h ファイルを正常に生成できました。次のコマンドを使用しました

C:\Program Files\Java\jdk1.6.0_21\bin>javah -d C:\Prachi\Android\Workspace_QP_re
structure\HelloWorld\bin\example\jni -classpath C:\Prachi\Android\Workspace_QP_r
estructure\HelloWorld\bin example.jni.HelloWorld

ここで example.jni は私のパッケージ名でC:\Prachi\Android\Workspace_QP_re structure\あり、私のEclipseワークスペースパスの場所です。

これがお役に立てば幸いです

于 2011-06-07T08:58:37.697 に答える
4

ソースディレクトリを -classpath に追加すると、この問題が発生しました。クラスは *.java ファイルにあると思いました;)

Javah はバイト コードに取り組んでいるため、バイナリを含むディレクトリをクラスパスに追加する必要があります。

私はいくつかのEclipseタスクを作成しました:

"位置"

${env_var:JAVA_HOME}\bin\javah.exe

「引数」

-verbose 
-force
-classpath ;${project_loc}\bin
-d ${project_loc}\jni 
${java_type_name}

ファイルを選択して実行

于 2010-12-21T12:20:22.163 に答える
3

私の場合、問題はかなりばかげていました..私は試してみます: javah com.aaa.bbb.ClassName. クラス

「.class」なしで.hファイルを正しく生成します

javah com.aaa.bbb.ClassName

于 2011-12-29T09:36:48.740 に答える
3

私はエクリプスを使用しています。

コマンド構文:

javah -d <outputdir> -classpath <classpath> <fully_qualified_class>

outputdir- ヘッダー ファイルが生成されるディレクトリ。

classpath- ルート パッケージを含むディレクトリへの絶対パスが含まれます。

fully_qualified_class.class-拡張子なしのネイティブ メソッドを含むクラスの名前

次のファイルが生成されます。

C:\Users\John\workspace\JNITest\bin\com\canessa\john\jnitest\com_canessa_john_jnitest_CallMyCLib.h

生成されたヘッダー ファイルの内容:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_canessa_john_jnitest_CallMyCLib */

#ifndef _Included_com_canessa_john_jnitest_CallMyCLib
#define _Included_com_canessa_john_jnitest_CallMyCLib
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_canessa_john_jnitest_CallMyCLib
 * Method:    helloInC
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_canessa_john_jnitest_CallMyCLib_helloInC
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
于 2016-12-19T14:22:00.057 に答える
2

同様の問題があり、-verboseオプションを使用しました。追加する必要がありました; クラスパスオプションの前に。

C:\Projects\HelloWorld\src>javah -verbose -classpath c:\projects\HellowWorld\build\classes helloworld.HelloWorld
error: cannot access helloworld.HelloWorld
class file for helloworld.HelloWorld not found
javadoc: error - Class helloworld.HelloWorld not found.
[ Search Path: c:\jdk\jre\lib\resources.jar;c:\jdk\jre\lib\rt.jar;c:\jdk\jre\lib    \sunrsasign.jar;c:\jdk\jre\lib\jsse.jar;c:\jdk\jre\lib\jce.jar;c:\jdk\jre\lib\ch    arsets.jar;c:\jdk\jre\classes\c:\projects\HellowWorld\build\classes ]
Error: No classes were specified on the command line.  Try -help.

C:\Projects\HelloWorld\src>javah -verbose -classpath ;c:\projects\HellowWorld\build\classes helloworld.HelloWorld
[ Search Path: c:\jdk\jre\lib\resources.jar;c:\jdk\jre\lib\rt.jar;c:\jdk\jre\lib\sunrsasign.jar;c:\jdk\jre\lib\jsse.jar;c:\jdk\jre\lib\jce.jar;c:\jdk\jre\lib\charsets.jar;c:\jdk\jre\classes\;c:\projects\HellowWorld\build\classes ]
[Creating file helloworld_HelloWorld.h]
[search path for source files: .,c:\projects\HellowWorld\build\classes]
[search path for class files: c:\jdk\jre\lib\resources.jar,c:\jdk\jre\lib\rt.jar,c:\jdk\jre\lib\sunrsasign.jar,c:\jdk\jre\lib\jsse.jar,c:\jdk\jre\lib\jce.jar,c:\jdk\jre\lib\charsets.jar,c:\jdk\jre\classes,c:\jdk\jre\lib\ext\dnsns.jar,c:\jdk\jre\lib\ext\localedata.jar,c:\jdk\jre\lib\ext\sunjce_provider.jar,c:\jdk\jre\lib\ext\sunmscapi.jar,c:\jdk\jre\lib\ext\sunpkcs11.jar,.,c:\projects\HellowWorld\build\classes]
[loading .\helloworld\HelloWorld.class]
[loading java\lang\Object.class(java\lang:Object.class)]
[loading java\lang\Throwable.class(java\lang:Throwable.class)]
[loading java\lang\Class.class(java\lang:Class.class)]
[done in 409 ms]

;がない場合、これは検索パスの終わりです:c:\ jdk \ jre \ classes \ c:\ projects \ HelloWorld \ build \ classes

上記の例のおかげで、ここまで到達することができました。

于 2012-04-02T15:48:44.153 に答える
1

Cygwin の問題:

javahCygwin ターミナルからは正しく動作しません:

$ cd /cygdrive/c/Workspace/prj/bin
$ ls com/example/JavaHotTo.class
com/example/JavaHotTo.class
$ javah com.example.JavaHowTo
Error: Could not find class file for 'com.example.JavaHowTo'.

しかし、オプションを使用すると完全に機能します-classpath .

$ javah -classpath . com.example.JavaHowTo
$ ls *.h
com_example_JavaHotTo.h

その他のトリック:

  • このオプション-jniはデフォルトであるため、必須ではありません。
  • 相対/絶対を与えることができますclasspath
  • ただしjavah、MS-Windows では、path à laを優先します C:\Workspace\prj\bin
  • cygpath -w /cygdrive/c/Workspace/prj/binMS-Windows 形式への変換に使用
  • オプション-d your/jni/headers/pathを使用して別のディレクトリにヘッダーを書き込みます
  • javahyour/jni/headers/path存在しない場合はパスを作成します(以下を参照)

    $ javah -d jni/headers -classpath . com.example.JavaHowTo
    $ ls       jni\headers
    com_example_JavaHotTo.h
    $ javah -d jni\path -classpath . com.example.JavaHowTo
    $ ls       jni\path
    com_example_JavaHotTo.h
    
于 2013-01-21T16:12:28.023 に答える
0

以下は私にとってはうまくいきました...ターミナルからプロジェクトパスに移動します

/home/usr/デスクトップ/ワークスペース/プロジェクト名/src/main/java

次のコマンドを押します。

javah -jni com.abc.test.callfileName (.class 拡張子なし)

com_abc_test_className.h ファイルは次のパスに作成されます/home/usr/Desktop/Workspace/ProjectName/src/main/java

最後に、コマンドは [my-machine/usr] $ /home/usr/Desktop/Workspace/ProjectName/src/main/java/src/main/java>javah -jni com.abc.test.className のようになります。

于 2016-03-03T09:57:52.780 に答える