블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
12-31 00:00
 

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
 

최근에 올라온 글

최근에 달린 댓글


JNI 를 사용하기 위해 자바에서는 dll 파일이나 so 파일을 로드하여 사용합니다.

하지만 jar 파일 안에 위와 같은 라이브러리 파일이 있을 경우 별도의 로직으로 로딩을 해야 합니다.


NativeLoader.java


load() 메소드에 라이브러리 이름을 지정하면 해당 클래스로더에서 라이브러리를 로드하게 됩니다.


주의사항

라이브러리를 로드하여 파일과 최초로 호출되는 파일이 동일할 경우 ClassLoader 에서 InputStream 을 정상적으로 가지고 오지 못하는 경우가 있습니다. 예를 들어 A.class.getClassLoader().getResourceAsStream("...") 를 통해 라이브러리에 접근한다고 할 때, 최초로 해당 jar 파일에 접근하는 클래스가 A 일경우 정상적으로 확인이 되지 않습니다. B 클래스를 통해 A 를 이용하여 라이브러리를 로드하면 정상적으로 수행됩니다.

Posted by 자수씨
, |

예전에 개발을 했었던 로컬편지함을 인수인계 하는 과정에서 자바에서 윈도우즈 레지스트리에 접근하는 라이브러리를 사용하는 부분이 있었는데 실행을 하게 되면 아래와 같은 에러가 발생하였습니다.

ERROR You have not installed the DLL named 'ICE_JNIRegistry.DLL'.
        no ICE_JNIRegistry in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.ice.jni.registry.RegistryKey.createSubKey(Ljava/lang/String;Ljava/lang/String;I)Lcom/ice/jni/registry/RegistryKey;
        at com.ice.jni.registry.RegistryKey.createSubKey(Native Method)
        at kr.co.vicki.example.jniregistry.JNIRegistryExample.main(JNIRegistryExample.java:13)

윈도우즈의 레지스트리를 수정하는 라이브러리 dll 을 클래스 패스에 넣고 실행했는데도 위와 같은 에러가 발생 한 것이였습니다. 오래전의 기억을 더듬다 보니 아래의 자바 실행 옵션을 확인할 수 있었습니다.

java -Djava.library.path=[native dll path]


저의 경우에는 native 폴더에 dll 을 넣어두었기 때문에 아래와 같이 실행하였더니 정상적으로 실행되었습니다.

java -Djava.library.path=native -jar LocalMailBox.jar

실행 옵션외에도 LD_LIBRARY_PATH 를 환경변수로 잡아주거나, 실행시 System.loadLibrary, System.load 로 동적 라이브러리를 로드할 수 있습니다.



Posted by 자수씨
, |
흠... 프로젝트 초창기부터 봐왔던 오류였는데...

고쳐진줄 알았던 것이였지만... 그게 아니였었다.

파일을 읽을 때 발생하는 익셉션이므로

C로 코드를 짠 후에 JNI 를 이용해서 파일을 읽고 넘겨주면 익셉션은 없겠지??

JNI 는 지금부터 시작~

Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백