Включая Native Library в Netbeans
Я пытаюсь читать портативные устройства из java signed applet....
Я нашел библиотеку jmtp на http://code.google.com/p/jmtp/w/list, чтобы получить доступ к портативным устройствам, но когда я запускаю его в 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();
}
}
пожалуйста, скажите мне, в чем проблема
Ответы
Ответ 1
Наконец, я нашел решение. Чтобы включить собственную библиотеку, нам нужно добавить следующие шаги в netbeans
==>Right click on the Project
==>Properties
==>Click on RUN
==>VM Options : -Djava.library.path="C:\Your Directory where Dll is present"
==>Ok
Ответ 2
Вы также можете загрузить библиотеку из программы с помощью этой строки:
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.
Ответ 3
После того, как я боролся с этим некоторое время, я нашел рабочее решение проблемы.
Я использовал System.out.println(System.getProperty("java.library.path"));
в моем коде, чтобы узнать, что фактическое значение для java.library.path
было в моей системе. Это, по крайней мере, конкатенация переменной %PATH%
для переменных системы и пользовательской среды. Так что все, что мне нужно, это добавить расположение моих библиотек в любой из них, и проблема исчезла.