0

如果我将所有 .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”的类文件。

4

2 回答 2

1

我一直从具有本机方法的类文件所在的目录中运行 javah 命令

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

于 2012-12-03T23:33:24.383 回答
1

你没有尝试的:只是去/bin/而不是进入CalculatorServer)并运行

javah -jni CalculatorServer.NativeMethodsCalculator

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

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

于 2012-12-04T10:32:58.610 回答