2012-07-09 69 views
2

我正在開發一個JNI應用程序。這是一個調用一些Java方法的C程序。包名打破JNI類路徑?

我寫了下面的一些互聯網的例子。

首先我在Eclipse Indigo中創建了一個簡單的示例(它在「默認包」中創建了Java文件)。然後我用這樣的事情在C代碼:

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

所有工作得很好,但後來我重新做了Java proyect有一個名爲「Funciones」包的Java代碼,所以我修改爲:

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

但現在我不工作......我認爲這是我在classpath中出錯的東西。

有人可以幫我嗎?

謝謝。

+3

classpath中不應該*內點*包,只是爲了保存它們的目錄。你的原始版本應該可以工作 – millimoose 2012-07-09 14:43:30

+0

感謝您的回答。恐怕原文不起作用...我有這個:funciones =(* env) - > FindClass(env,「Funciones」);也許問題在這裏?謝謝。 – user1274605 2012-07-09 14:45:36

+1

如果'Funciones'是一個包,那麼顯然不是您要找的類名。不知道你的代碼的佈局是什麼,但你應該做一些像'(* env) - > FindClass(env,「Funciones/Funciones」);' – millimoose 2012-07-09 14:50:29

回答

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");