Java 包名破坏了JNI类路径?

Java 包名破坏了JNI类路径?,java,c,java-native-interface,Java,C,Java Native Interface,我正在开发一个JNI应用程序。它是一个调用一些Java方法的C程序 我是根据一些互联网的例子写的 首先,我在EclipseIndigo中创建了一个简单的示例(它在“默认包”中创建了Java文件)。然后我在C代码中使用了类似的东西: options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin"; 所有这些都很好,但后来我重新制作了Java项目,将Java代码放在一个名为“Functiones”的包中,

我正在开发一个JNI应用程序。它是一个调用一些Java方法的C程序

我是根据一些互联网的例子写的

首先,我在EclipseIndigo中创建了一个简单的示例(它在“默认包”中创建了Java文件)。然后我在C代码中使用了类似的东西:

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin";
所有这些都很好,但后来我重新制作了Java项目,将Java代码放在一个名为“Functiones”的包中,因此我修改为:

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin/Funciones";
但现在我不工作了。。。我想是我在类路径中出错了

有人能帮我吗


谢谢。

您希望类路径指向保存您正在使用的顶级包的目录(或多个目录,或
jar
文件),而不是在包内。因此,如果您的代码是这样布置的:

~/Funciones/bin/
|
>----Funciones
|    |
|    >----Funciones.class – this is the class Funciones.Funciones
|
>----some other package
|
:
您需要将
~/functiones/bin
添加到类路径中。要查找该类,需要使用其–以包名为前缀的类名:

Class clsFunciones = Class.forName("Funciones.Funciones");
或者,在JNI中:


类路径不应该指向包内部,而应该指向保存包的目录。您的原始版本应该有效。谢谢您的回答。恐怕原版不起作用了。。。我有这个:functiones=(*env)->FindClass(env,“functiones”);也许问题就在这里?谢谢。如果
functiones
是一个包,那么它显然不是您要查找的类名。不确定代码的布局是什么,但应该执行类似于
(*env)->FindClass(env,“functiones/functiones”)
@millimoose,也许你会想把这个评论变成一个答案,这样如果事情进展顺利,它可以被接受,而且这个问题在技术上不会永远没有答案。谢谢millimoose让这个把戏成功!!!现在我也可以从*.jar文件加载类了吗?类似于:options.optionString=“-Djava.class.path=/path/to/my/jar/myjar.jar”?谢谢
jclass clsFunciones = (*env)->FindClass(env, "Funciones/Funciones");