在不同的包中生成JNI头文件

时间:2012-12-03 23:17:24

标签: java header java-native-interface classpath

如果我在一个地方(即在默认包中)拥有我的所有.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'的类文件。

2 个答案:

答案 0 :(得分:1)

  

我一直在使用本机方法的类文件

的目录中运行javah命令

那是你的错。您应该从包含最外层程序包的目录运行它,内部程序包及其下面的.class文件。然后,您不需要-d参数或-classpath参数。假设您的最外层包是CalculatorServer,您应该在包含CalculatorServer的目录中,并且所需的命令行是javah CalculatorServer.NativeMethodsCalculator

答案 1 :(得分:1)

您没有尝试的内容:只需转到/bin/进入CalculatorServer)并运行

javah -jni CalculatorServer.NativeMethodsCalculator

这是如何运行它的唯一方法。只需看看javah doc。它在概要中说“完全限定的类名”。 “完全限定”表示完整类路径。你只给它类名。到目前为止,它只对您有用,因为您使用的是默认包,这意味着您的完全限定类名等于裸名。

选项-d-o不会影响类查找,只影响本机结果的存储。您尝试的所有变体都不会对您的错误产生任何影响。