2009-07-16 19 views
11

En un programa Java que estoy escribiendo hago una llamada JNI a un DLL y cargar la biblioteca en el inicio de la siguiente manera¿Verifica si ya está cargada una biblioteca dll? (Java)

static 
{ 
    System.loadLibrary("LdapAuthenticator2"); 
} 

entonces he implementado otra clase que carga la misma biblioteca y estoy recibiendo un error diciendo que la biblioteca ya está cargada, ¿hay alguna manera de verificar si la biblioteca ya se está ejecutando?

Gracias,
-Pete

Respuesta

0

¿Qué tipo de un error? Si es una excepción, ¿puedes atraparla?

Otro enfoque sería hacer exactamente una clase responsable de cargar la biblioteca. Puede hacer que la biblioteca se cargue como parte del inicializador estático de la clase y luego cargar la clase == cargando la biblioteca.

EDIT: las javadocs for Runtime.loadLibrary() (que System.loadLibrary llamadas) incluso sugiere el enfoque inicializador estático:

Si se van a utilizar métodos nativos en la implementación de una clase, una estrategia estándar es poner el nativo código en un archivo de biblioteca (llámese LibFile) y luego poner un inicializador estático :

 static { System.loadLibrary("LibFile"); } 

dentro de la declaración de la clase. Cuando se cargue e inicialice la clase, se cargará también la implementación necesaria del código nativo para los métodos nativos .

Los javadocs también dicen:

Si este método se llama más de una vez con el mismo nombre de la biblioteca, se ignoran las llamadas segunda y subsiguientes.

lo que me hace aún más curioso sobre el error que está recibiendo.

+2

supongo que consigue un UnsatisfiedLinkError porque dos cargadores de clases diferentes tratan de cargar la misma biblioteca nativa – jitter

+1

Algunos enlaces pertinentes para el problema http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 4750956 y http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039 – jitter

+0

sí, la fluctuación es correcta, ese es el error que estoy recibiendo, gracias por los enlaces jitter –

Cuestiones relacionadas