如果我在一个地方(即在默认包中)拥有我的所有.java和.class文件,那么一切正常,我会做所有JNI的事情,等等。
但在这种情况下,我有package-ception(许多目录),我的类和Java文件在/bin
和/src
中分开,依此类推。我需要生成头文件,但我一直都会遇到错误。我尝试了很多命令,我看到了不同的教程。我已经没有选择了。
所以我的项目在c://gvk/SEP3
中,然后使用我将要使用的本机方法的类和Java文件位于/bin/CalculatorServer
和/src/CalculatorServer
我一直在使用本机方法的类文件所在的目录中运行javah
命令。我到目前为止尝试的命令是:
javah -d ./CalculatorServer NativeMethodsCalculator
错误:找不到'NativeMethodsCalculator'的类文件。
javah -d ./CalculatorServer CalculatorServer.NativeMethodsCalculator
错误:无法找到“CalculatorServer.NativeMethodsCalculator”的类文件。
javah -d c://gvk/SEP3/bin/CalculatorServer -classpath c://gvk/SEP3/bin/CalculatorServer NativeMethodsCalculator
错误:找不到'NativeMethodsCalculator'的类文件。
javah -classpath c://gvk/SEP3/bin/CalculatorServer -o NativeMethodsCalc.h src.CalculatorServer.NativeMethodsCalculator
错误:无法找到'src.CalculatorServer.NativeMethodsCalculator'的类文件。
javah -jni bin.CalculatorServer.NativeMethodsCalculator
错误:无法找到'bin.CalculatorServer.NativeMethodsCalculator'的类文件。
答案 0 :(得分:1)
我一直在使用本机方法的类文件
的目录中运行javah命令
那是你的错。您应该从包含最外层程序包的目录运行它,内部程序包及其下面的.class文件。然后,您不需要-d参数或-classpath参数。假设您的最外层包是CalculatorServer,您应该在包含CalculatorServer的目录中,并且所需的命令行是javah CalculatorServer.NativeMethodsCalculator
。
答案 1 :(得分:1)
您没有尝试的内容:只需转到/bin/
(不进入CalculatorServer
)并运行
javah -jni CalculatorServer.NativeMethodsCalculator
这是如何运行它的唯一方法。只需看看javah doc。它在概要中说“完全限定的类名”。 “完全限定”表示完整类路径。你只给它类名。到目前为止,它只对您有用,因为您使用的是默认包,这意味着您的完全限定类名等于裸名。
选项-d
和-o
不会影响类查找,只影响本机结果的存储。您尝试的所有变体都不会对您的错误产生任何影响。