2012-07-09 2 views
2

저는 JNI 응용 프로그램을 만들고 있습니다. 이것은 일부 Java 메소드를 호출하는 C 프로그램입니다.패키지 이름이 JNI 클래스 경로를 위반합니까?

나는 인터넷 예제에 따라 작성했습니다.

먼저 Eclipse Indigo에서 간단한 예제를 만들었습니다 (Java 파일을 "기본 패키지"로 만들었습니다). 그럼 난 C 코드에서 이런 식으로 뭔가를 사용 :

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

모두 잘 작동하지만 그때 나는 "Funciones"라는 패키지의 Java 코드를 가지고있는 자바 proyect을 만든 재, 그래서 수정에 :

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

하지만 지금은 작동하지 않습니다 ... 나는 classpath에서 내가 잘못한 것으로 생각합니다.

누군가 나를 도와 줄 수 있습니까?

감사합니다.

+3

클래스 경로가 * 내부를 가리 안 패키지 이름 접두사 클래스 이름 - 클래스를 찾으려면, 당신은 fully qualified name를 사용할 필요가 패키지를 지키는 디렉토리. 원래 버전이 작동해야합니다. – millimoose

+0

답변 해 주셔서 감사합니다. 원본이 작동하지 않을까 걱정됩니다 ... 나는 이것을 가지고 있습니다 : funciones = (* env) -> FindClass (env, "Funciones"); 어쩌면 문제가 여기에 있을까요? 감사. – user1274605

+1

'Funciones'가 패키지 인 경우 찾고있는 클래스 이름이 분명하지 않습니다. 코드의 레이아웃이 무엇인지 모르지만'(* env) -> FindClass (env, "Funciones/Funciones"); ' – millimoose

답변

3

이 아니고 사용중인 최상위 패키지가있는 디렉토리 (또는 디렉토리 또는 jar 파일)를 클래스 경로로 가리 키길 원합니다. 패키지. 코드는 다음과 같이 배치됩니다 그래서 만약 :

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

을 당신은 당신의 클래스 패스에 ~/Funciones/bin를 추가해야합니다.

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

또는 JNI에서이 class descriptor :

jclass clsFunciones = (*env)->FindClass(env, "Funciones/Funciones"); 
관련 문제