2012-10-09 55 views
7

Tôi cố gắng để đọc các thiết bị di động từ java ký Applet .... Tôi tìm thấy một thư viện jmtp trên http://code.google.com/p/jmtp/w/list để có được quyền truy cập vào các thiết bị di động nhưng khi tôi chạy nó trong netbeans nó mang lại cho lỗi Bao gồm Thư viện Native trong 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 

tôi đã tìm kiếm và phát hiện ra rằng tôi phải bao gồm tập tin .dll như thư viện bản địa trong dự án của jmtp ... tôi phải nhấp vào dự án và chuyển đến tài sản và sau đó chọn "Run" và chọn VM Lựa chọn như

-Djava.library.path="c:\jmtp\native\windows"
và đặt tập tin jmtp.dll đó vào thư mục c: \ jmtp

Nhưng cùng một lỗi xuất hiện liên tục mã của tôi là

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

    } 
} 

xin vui lòng, cho tôi biết vấn đề

+0

Bạn cũng có thể sao chép và dán các đối số trực tiếp từ các tệp dơi được đính kèm trong kho lưu trữ nguồn. –

Trả lời

21

Cuối cùng tôi tìm thấy giải pháp là gì, Để bao gồm thư viện bản địa chúng ta cần để thêm các bước sau vào netbeans

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

+6

Điều này đã làm việc cho tôi để chạy các dự án trong Netbeans, nhưng một khi bình được xây dựng cùng một lỗi là trở lại. Vì vậy, nó không giúp đỡ về lâu dài. –

+0

Làm việc cho tôi, không bao gồm dll trong đường dẫn, chỉ có thư mục nơi nó cư trú. –

+0

Làm thế nào chúng ta có thể có dll/cài đặt này trong một khi outpur jar được xây dựng? –

6

Bạn cũng có thể tải thư viện từ bên trong chương trình ing dòng này:

System.loadLibrary("jmtp") 

Đặt thư mục chứa tệp jmtp.dll trực tiếp trong dự án Java.

Ngoài ra, tôi đã cố gắng này và nó hoạt động:

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

Trong khi "libs" là thư mục có chứa các dll và được đặt trực tiếp trong thư mục dự án java.

tôi nhận thấy rằng jmtp.dll cung cấp cho các ngoại lệ sau đây với 64-bit 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) 

Bạn sẽ cần phải chạy chương trình trên 32-bit JDK để làm việc này.

-1

Sau khi đấu tranh với điều này một thời gian, tôi đã tìm thấy một giải pháp làm việc cho vấn đề.

Tôi đã sử dụng System.out.println(System.getProperty("java.library.path")); trong mã của mình để tìm hiểu giá trị thực tế cho java.library.path là trên hệ thống của tôi. Đó là ít nhất một kết nối của biến số %PATH% cho biến môi trường của hệ thống và người dùng. Vì vậy, tất cả những gì tôi cần là thêm vị trí của thư viện của tôi vào một trong những thư viện đó và vấn đề đã biến mất.

Các vấn đề liên quan