包名破坏JNI类路径?

时间:2012-07-09 14:40:57

标签: java c java-native-interface

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

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

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

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin";

一切正常,但后来我重新制作了Java proyect,将Java代码放在名为“Funciones”的软件包中,所以我修改为:

options.optionString = "-Djava.class.path=/home/elias/workspace/Funciones/bin/Funciones";

但是现在我没有工作......我认为这是我在类路径中出错的地方。

有人能帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:3)

您希望类路径指向包含您正在使用的顶级软件包的目录(或目录或jar文件),而不是软件包中。所以,如果您的代码布局如下:

~/Funciones/bin/
|
>----Funciones
|    |
|    >----Funciones.class – this is the class Funciones.Funciones
|
>----some other package
|
:

您需要将~/Funciones/bin添加到类路径中。要查找该类,您需要使用其fully qualified name - 前缀为包名的类名:

Class clsFunciones = Class.forName("Funciones.Funciones");

或者,在JNI中,class descriptor

jclass clsFunciones = (*env)->FindClass(env, "Funciones/Funciones");