Pregunta

Estoy usando un archivo JAR propio, que usa una biblioteca Java (JHDF5), que a su vez usa un dll a través de JNI. Cuando uso mi propio archivo JAR en MATLAB, y luego tengo que reconstruirlo durante la depuración, aparece este error cuando intento usarlo nuevamente, después de llamar a clear java y crear un nuevo objeto desde mi JAR archivo:

java.lang.UnsatisfiedLinkError: 
Native Library C:\deka\proj\java\ESPDF\dist\lib\jhdf5.dll 
already loaded in another classloader

y no puedo resolverlo sin apagar MATLAB y volver a abrir, lo cual es un dolor en el cuello.

¿Qué es este error y de quién es la culpa? (¿el mío? ¿MATLAB's? JHDF5 por no liberar el archivo DLL o comprobar si ya está cargado)

¿Fue útil?

Solución

En general, no hay forma de que el código Java descargue un dll nativo. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 5075039

Dado que, una vez que se carga un dll, está allí durante la vida útil de la JVM y la VM se asegurará de que se cargue una vez y solo una vez.

Para responder a la pregunta de la culpa, supongo que es culpa del código que intenta cargar el archivo DLL sin verificar si ya está disponible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top