Включая нативную библиотеку в Netbeans

Я пытаюсь читать переносимые устройства из подписанного Java-апплета.... Я нашел библиотеку jmtp на http://code.google.com/p/jmtp/w/list чтобы получить доступ к переносным устройствам, но когда я запускаю ее в NetBeans дает ошибку

    Исключение в потоке "main" java.lang.UnsatisfiedLinkError: нет jmtp в java.library.path
        в java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        at java.lang.Runtime.loadLibrary0(Runtime.java:845)
        в java.lang.System.loadLibrary(System.java:1084)
        в jmtp.PortableDeviceManagerImplWin32.(PortableDeviceManagerImplWin32.java:38)
        в jmtp.PortableDeviceManager.(PortableDeviceManager.java:34)
        в jmtp.Jmtp.main(Jmtp.java:23)
    Java Результат: 1
    

Я искал и обнаружил, что мне нужно включить.dll-файл как родную библиотеку в проект jmtp... Я щелкнул правой кнопкой мыши на проекте и перешел к свойствам, а затем выбрал "Выполнить" и выбранный параметр VM как

 -Djava.library.path="C:\jmtp\ родной \ окна" 
и поместил этот файл jmtp.dll в папку c:\jmtp

Но постоянно появляется одна и та же ошибка, мой код

    пакет 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();

    }
}

пожалуйста, скажите мне, в чем проблема

3 ответа

Решение

Наконец, я нашел решение: чтобы включить нативную библиотеку, нам нужно добавить следующие шаги в netbeans

     ==> Щелкните правой кнопкой мыши на проекте
     ==> Свойства
     ==> Нажмите на RUN
     ==> Параметры виртуальной машины: -Djava.library.path="C:\ Ваш каталог, где присутствует Dll"
     ==>Ok
    

Вы также можете загрузить библиотеку из программы, используя следующую строку:

System.loadLibrary("jmtp")

Поместите папку, содержащую файл jmtp.dll прямо под проектом Java.

В качестве альтернативы я попробовал это, и это работает:

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

Принимая во внимание, что "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, чтобы это работало.

Поработав с этим некоторое время, я нашел рабочее решение проблемы.

я использовал System.out.println(System.getProperty("java.library.path"));в моем коде, чтобы узнать, что фактическое значение для java.library.path был в моей системе. По крайней мере, это объединение %PATH% переменная для системных и пользовательских переменных среды. Таким образом, все, что мне было нужно, это добавить расположение моих библиотек в одну из них, и проблема исчезла.

Другие вопросы по тегам