puede empaquetar el .dll
en el .jar
, pero el archivo físico .dll
debe ser desempaquetado de allí antes de que pueda ser cargado por la forma en que Windows maneja .dll
s. No hay forma de cargar un .dll
directamente desde el interior del .jar
.
This question parece contener una implementación adecuada. Sin embargo, tenga en cuenta que es un poco propenso a errores: si el programa no tiene permisos de escritura donde vaya a extraer el .dll
, se encuentra en una situación extraña; no puede cargar el .dll
porque no tiene permisos para escribirlo primero.
Una solución más robusta es utilizar algún tipo de instalación para instalar toda la aplicación en una jerarquía de directorios como
/whatEver/myApp/ (The working directory of the app.)
/whatEver/myApp/myApp.jar (The main app.)
/whatEver/myApp/lib/library.dll (The JNI library.)
A continuación, puede cargar la DLL simplemente utilizando una ruta relativa al directorio de trabajo,
System.loadLibrary("lib/library.dll");
Para ser aún más robusto, querrá asegurarse de que está ejecutando una JVM con la cantidad apropiada de bits antes de intentar cargar la biblioteca. Un hecho poco publicitado es que una VM de 64 bits no puede cargar bibliotecas de 32 bits, ni viceversa. Ver this pregunta.
http://forums.sun.com/thread.jspa?threadID=5358593 Esto podría resolver su problema –