2012-10-09 17 views
7

Ich versuche, tragbare Geräte zum Lesen von Java-Applet unterzeichnet .... fand ich eine jmtp Bibliothek auf http://code.google.com/p/jmtp/w/list Zugriff auf tragbare Geräte zu bekommen, aber wenn ich es in Netbeans laufen gibt es Fehler einschließlich nativer Bibliothek in 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 

ich suchte und fand, dass ich DLL-Datei als native Bibliothek in Projekt von jmtp ... ich rechts geklickt haben auf Projekt und navigiert zu Eigenschaften und dann ausgewählt „Run“ und ausgewählte VM Option als

-Djava.library.path="c:\jmtp\native\windows"
enthalten habe und legte diese jmtp.dll-Datei in c: \ jmtp-Ordner

Aber gleiche Fehler erscheint ständig mein Code

 
    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(); 

    } 
} 

bitte, sagen Sie mir, was das Problem

i
+0

Sie können die Argumente auch direkt aus den Bat-Dateien im Quellarchiv kopieren und einfügen. –

Antwort

21

schließlich die Lösung gefunden, Um native Bibliothek schließen wir brauchen um folgende Schritte in Netbeans hinzuzufügen

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

+6

Das hat für mich funktioniert, das Projekt in Netbeans auszuführen, aber sobald das Glas gebaut wird, ist der gleiche Fehler zurück. Es hilft also auf lange Sicht nicht. –

+0

Funktioniert für mich, nicht die DLL in den Pfad enthalten, nur das Verzeichnis, in dem es sich befindet. –

+0

Wie können wir diese DLL/Einstellungen in einmal Outpur Glas bauen? –

6

Sie können die Bibliothek auch aus dem Programm heraus laden ing diese Zeile:

System.loadLibrary("jmtp") 

Legen Sie den Ordner mit der Datei jmtp.dll direkt unter dem Java-Projekt enthält.

Alternativ habe ich versucht, diese und es funktioniert:

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

Während „Libs“ ist der Ordner, der die DLL enthalten und wird direkt unter dem Java-Projekt-Ordner abgelegt.

bemerkte ich, dass die jmtp.dll die folgende Ausnahme mit einem 64-Bit-JDK gibt:

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) 

, müssen Sie das Programm auf einem 32-Bit-JDK für diese arbeiten auszuführen.

-1

Nachdem ich eine Weile damit zu kämpfen hatte, habe ich eine funktionierende Lösung für das Problem gefunden.

Ich verwendete System.out.println(System.getProperty("java.library.path")); innerhalb meines Codes, um herauszufinden, was der tatsächliche Wert für java.library.path auf meinem System war. Es ist zumindest eine Verkettung der Variablen %PATH% für die System- und Benutzerumgebungsvariablen. Alles, was ich dazu brauchte, war, den Standort meiner Bibliotheken beiden hinzuzufügen, und das Problem verschwand.

Verwandte Themen