2011-01-21 9 views
14

Mi aplicación Java utiliza una biblioteca DLL. ¿Cómo puedo hacer que funcione desde el archivo JAR?Extraiga y cargue DLL desde JAR

La DLL está en la carpeta de fuentes del proyecto. Tengo que incluirlo en mi JAR, extraerlo en tiempo de ejecución (en el mismo directorio del contenedor) y cargarlo.

Respuesta

25

Debe poner dll en la ruta de su biblioteca (recomendado) antes de intentar cargarlo. para que tenga que extraerlo del jar y copiarlo en la ruta de lib.

private static void loadLib(String path, String name) { 
    name = System.mapLibraryName(name); // extends name with .dll, .so or .dylib 
    try { 
     InputStream in = ACWrapper.class.getResourceAsStream("/"+path + name); 
     File fileOut = new File("your lib path"); 
     OutputStream out = FileUtils.openOutputStream(fileOut); 
     IOUtils.copy(in, out); 
     in.close(); 
     out.close(); 
     System.load(fileOut.toString());//loading goes here 
    } catch (Exception e) { 
       //handle 
    } 
} 

Nota:ACWrapper es la clase que sostiene el método estático

+0

compilador no puede encontrar FileUtils y IOUtiles – Oneiros

+0

es necesario agregar [commons-io] (http: // findjar. com/jar/commons-io/commons-io/1.4/commons-io-1.4.jar.html) jar en su classpath –

+0

bien, pero ¿cómo puedo obtener la ruta java lib? – Oneiros

-6
try { 
    InputStream in = Main.class.getResourceAsStream("/example-input.dll"); 

    File fileOut = new File("./example-output.dll"); 

    DataOutputStream writer = new DataOutputStream(new FileOutputStream(fileOut)); 

    long oneChar = 0; 
    while((oneChar = in.read()) != -1){ 
    writer.write((int)oneChar); 
    } 

    in.close(); 
    writer.close(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 
+2

DataOutputStream está completamente equivocado. – bmargulies

Cuestiones relacionadas