2011-02-17 4 views
0

질문이 있습니다. DLL을 실제로로드하지 않고로드 할 수 있는지 확인할 수있는 방법이 있습니까? 내 문제는 다음과 같습니다.로드 가능한 JNI 라이브러리 확인

네이티브 라이브러리를로드해야하는 타사 API를 사용하고 있습니다. 그러나 괴괴 망측 한 것은 "도서관"인에도 불구하고 System.exit()에 전화를 걸 것이기 때문에 그것이 기본 라이브러리를로드 할 수 없다는 것입니다. 내 응용 프로그램이 해당 라이브러리에 종속되어 있지만 내 응용 프로그램의 기능인 라이브러리를 사용할 수 없더라도 응용 프로그램이 중단되는 것을 원하지 않습니다. 따라서 라이브러리를 사용하기 전에 dll이로드 가능한지 확인하고 싶습니다. System.loadLibrary("LibraryName") 문에서 UnsatisfiedLinkError가 throw되었는지 확인하여이 작업을 시도했습니다. 오류가 발생하면 해당 라이브러리를 사용하지 않습니다. 그러나 오류가 발생하지 않으면 라이브러리를 사용합니다. 이제이 일을 한 후 나는 다음과 같은 오류 얻을 :

Cannot native library. The libary was already loaded in a different ClassLoader.

Hance 나는 System.loadLibrary() 방법에서 라이브러리를로드 할 수 없습니다 및 그것은 단지 타사 라이브러리에서 않습니다. 그럼, 제 질문은 "라이브러리를 실제로로드하지 않고로드 할 수 있는지 어떻게 확인할 수 있습니까?"입니다.

답변

0

라이브러리를로드 할 수 없으면 system.exit()을 호출하면 안됩니다. 로드 할 라이브러리를로드하려고 시도 할 때 오류가 발생합니다. 올바르게로드되지 않은 라이브러리가 프로세스를 죽이는 것이 가능한지 여부. 이것을 확인하는 유일한 방법은 별도의 프로세스 시도로 라이브러리를로드하고 어떤 일이 발생하는지 확인하는 것입니다.

+0

제 3 자 라이브러리 [.jar 파일]을 사용하고 있습니다. 이 항아리에는 네이티브 라이브러리를로드하는 클래스가 있습니다. 그러나 라이브러리를로드하는 동안 오류가 발생하면 System.exit()을 호출합니다. 또한 라이브러리를 사용하려면 항아리에 기본 라이브러리 자체를로드해야합니다. 내가 그를 위해 그렇게한다면, 그것은 나에게 오류를 준다. –

+1

SecurityManager를 사용하여 라이브러리에서 System.exit()을 수행하는 것을 방지 할 수 있습니다. 라이브러리를로드하지 못했다는 표시 대신 플래그를 설정하는 데 사용할 수 있습니다. –

+0

SecurityManager를 사용하여 라이브러리에서 System.exit()을 수행하지 못하게하려면 어떻게해야합니까? –

관련 문제