2012-10-09 19 views
7

Estoy tratando de leer los dispositivos portátiles de Java Applet firmado .... encontré una biblioteca jmtp en http://code.google.com/p/jmtp/w/list para obtener acceso a los dispositivos portátiles pero cuando lo ejecuto en NetBeans Da error biblioteca nativa en Netbeans

 
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jmtp in java.library.path 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) 
     at java.lang.Runtime.loadLibrary0(Runtime.java:845) 
     at java.lang.System.loadLibrary(System.java:1084) 
     at jmtp.PortableDeviceManagerImplWin32.(PortableDeviceManagerImplWin32.java:38) 
     at jmtp.PortableDeviceManager.(PortableDeviceManager.java:34) 
     at jmtp.Jmtp.main(Jmtp.java:23) 
    Java Result: 1 

he buscado y encontrado que tengo que incluir el archivo .dll como biblioteca nativa en el proyecto de jmtp ... right-hecho clic en proyecto y navegado a las propiedades y luego seleccionada en "Ejecutar" y la opción seleccionada como VM

-Djava.library.path="c:\jmtp\native\windows"
y coloca ese archivo jmtp.dll en la carpeta c: \ jmtp

Pero aparece el mismo error constante mi código es

 
    package jmtp;

import jmtp.PortableDevice; 
import jmtp.PortableDeviceManager; 
import jmtp.PortableDeviceObject; 
import jmtp.PortableDeviceStorageObject; 

public class Jmtp { 

    public static void main(String[] args) { 
     PortableDeviceManager manager = new PortableDeviceManager(); 
     PortableDevice device = manager.getDevices()[0]; 

     // Connect to my mp3-player 
     device.open(); 
     System.out.println(device.getModel()); 
     System.out.println("---------------"); 

     // Iterate over deviceObjects 
     for(PortableDeviceObject object : device.getRootObjects()) { 

      // If the object is a storage object 
      if(object instanceof PortableDeviceStorageObject) { 
       PortableDeviceStorageObject storage = (PortableDeviceStorageObject)object; 

       for(PortableDeviceObject o2 : storage.getChildObjects()){ 
        System.out.println(o2.getName()); 
       }    
      } 
     } 
     manager.getDevices()[0].close(); 

    } 
} 

por favor, dime lo que es el tema

+0

También puede copiar y pegar los argumentos directamente desde los archivos bat conectados en el archivo fuente. –

Respuesta

21

fin encontré la solución, con el fin de incluir biblioteca nativa que necesitamos para agregar los siguientes pasos en netbeans

 
    ==>Right click on the Project 
    ==>Properties 
    ==>Click on RUN 
    ==>VM Options : -Djava.library.path="C:\Your Directory where Dll is present" 
    ==>Ok 

+6

Esto me ha funcionado para ejecutar el proyecto en Netbeans, pero una vez que se construye el jar, vuelve el mismo error. Por lo tanto, no ayuda en el largo plazo. –

+0

Funciona para mí, no incluya el dll en la ruta, solo el directorio donde reside. –

+0

¿Cómo podemos tener esta dll/configuración en el jar una vez que se construye? –

6

También puede cargar la biblioteca desde el programa us ing esta línea:

System.loadLibrary("jmtp") 

Coloque la carpeta que contiene el archivo jmtp.dll directamente bajo el proyecto Java.

Por otra parte, he intentado esto y funciona:

System.setProperty("java.library.path", "libs"); 

mientras que "libs" es la carpeta que contiene el archivo DLL y se coloca directamente en la carpeta de proyecto Java.

me di cuenta de que el jmtp.dll da la siguiente excepción con una de 64 bits JDK:

Exception in thread "main" java.lang.UnsatisfiedLinkError: libs/jmtp (.\libs/jmtp.dll is not a valid Win32 application.) 
    at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1018) 
    at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:982) 
    at java.lang.System.loadLibrary(System.java:506) 
    at podcasts.Transferer.main(Transferer.java:28) 

Usted tendrá que ejecutar el programa en un JDK de 32 bits para que esto funcione.

-1

Después de luchar con esto por un tiempo, encontré una solución para el problema.

Usé System.out.println(System.getProperty("java.library.path")); dentro de mi código para averiguar cuál era el valor real de java.library.path en mi sistema. Es al menos una concatenación de la variable %PATH% para las variables de entorno del sistema y del usuario. Entonces todo lo que necesitaba era agregar la ubicación de mis bibliotecas a cualquiera de ellas y el problema desapareció.

Cuestiones relacionadas