0

我一直在尝试使用以下命令创建一个 .h 文件:

javah -jni MyClass

当然做了之后

javac MyClass.java

这不会给我任何错误消息...

但是,每当我执行javah -jni命令时,都会出现以下错误:

Exception in thread "main" java.io.IOException: can't find class file
MyClass.class in 
java.net.URLClassLoader{urls=[file:/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre/lib/rt.jar], 
parent=gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}}
               at gnu.classpath.tools.javah.Main.getClass(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.parseClasses(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.run(libgcj-tools.so.14)
               at gnu.classpath.tools.javah.Main.main(libgcj-tools.so.14)

顺便说一句,我正在使用 Windows 10 PC

4

1 回答 1

0

查看 MyClass 中定义的包。可能是您使用了一些包名,然后您只传递了类名 - 这不起作用。

确保该类可通过 CLASSPATH 获得。

或者,您可以通过 javah 的 -cp 参数传递类位置(连同包)。

看看这里:

http://jnicookbook.owsiak.org/recipe-No-001/

你可以在那里找到完全工作的、超级简单的样本。

它应该开箱即用。做就是了:

git clone https://github.com/mkowsiak/jnicookbook.git
cd jnicookbook/recipes/recipeNo001
make; make test

如果您在这里仍然有问题。您的安装可能有些问题。

如果它适合您,请确保使用与 Makefile 中类似的编译标志

玩 JNI :)

更新:

正如上面评论中已经指出的那样,也许您可​​以切换到 Oracle 的 JDK?

如果您使用 Oracle 的 JDK,则不会出现此类问题。您可以使用 javah 轻松生成 C 标头

如果您必须坚持使用 GCJ(例如遗留代码),不妨尝试一下

javah -jni -cp . Main
于 2017-05-01T06:16:34.130 回答