我正在尝试从java签名的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
我搜索并发现我必须在.jmtp的项目中包含.dll文件作为本机库... 我右键单击项目并导航到属性,然后选择“运行”和选择的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 :(得分:23)
最后我找到了解决方案,为了包含本机库,我们需要在netbeans中添加以下步骤
==>Right click on the Project ==>Properties ==>Click on RUN ==>VM Options : -Djava.library.path="C:\Your Directory where Dll is present" ==>Ok
答案 1 :(得分:6)
您还可以使用以下行从程序中加载库:
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上运行该程序才能使其正常工作。
答案 2 :(得分:1)
经过一段时间的努力,我找到了解决问题的有效方法。
我使用了System.out.println(System.getProperty("java.library.path"));
在我的代码中找出java.library.path
在我的系统上的实际值。它至少是系统和用户环境变量的%PATH%
变量的串联。所以我需要的是将我的库的位置添加到其中任何一个,问题就消失了。