2012-10-09 25 views
7

我試圖從Java簽名Applet閱讀便攜式設備.... 我發現了一個jmtp庫上 http://code.google.com/p/jmtp/w/list以訪問便攜式設備,但是當我在NetBeans中運行它,它給了錯誤 包括本地庫中的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 

我搜索,發現我必須包括.dll文件作爲jmtp ... 我右鍵點擊項目,並導航到屬性,然後選擇項目「運行」本地庫,並選擇VM選項,

-Djava.library.path="c:\jmtp\native\windows"
並將該jmtp.dll文件放在c:\ jmtp文件夾中

但出現同樣的錯誤不斷 我的代碼是

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

    } 
} 

請告訴我什麼是問題

+0

您也可以直接從源檔案中附加的bat文件複製和粘貼參數。 – 2013-07-10 08:09:39

回答

21

最後我找到了解決辦法,以包括我們需要本地庫在netbeans中添加以下步驟

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

+6

這對我來說是在Netbeans中運行該項目的工作,但是一旦構建了jar,同樣的錯誤又回來了。所以這從長遠來看並沒有幫助。 –

+0

對我來說,不要在路徑中包含dll,只包含它所在的目錄。 –

+0

一旦outpur jar被構建,我們如何才能擁有這個dll/settings? –

6

您還可以從程序中加載庫荷蘭國際集團這一行:

System.loadLibrary("jmtp") 

將裝有直接在Java項目下的文件jmtp.dll的文件夾。

另外,我想這和它的作品:

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

而「庫」是包含在DLL它是Java項目文件夾下直接放置在文件夾中。

我注意到jmtp.dll給出了以下異常有64位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) 

你需要運行在32位JDK的程序進行這個工作。

-1

經過一段時間的努力,我找到了解決問題的工作方案。

我在我的代碼中使用了System.out.println(System.getProperty("java.library.path")); 來查明java.library.path在我的系統上的實際值。它至少是系統和用戶環境變量的%PATH%變量的並置。所以我需要的就是將我的庫的位置添加到其中任何一個,問題就消失了。