Uma*_*ziz 10 java wpd netbeans-7 java.library.path unsatisfiedlinkerror
我正在尝试从java签名的applet中读取便携式设备....我在http://code.google.com/p/jmtp/w/list上找到了一个jmtp库 来访问便携式设备,但是当我运行它时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();
}
}
Run Code Online (Sandbox Code Playgroud)
拜托,告诉我是什么问题
Uma*_*ziz 24
最后我找到了解决方案,为了包含本机库,我们需要在netbeans中添加以下步骤
==>Right click on the Project
==>Properties
==>Click on RUN
==>VM Options : -Djava.library.path="C:\Your Directory where Dll is present"
==>Ok
您还可以使用以下行从程序中加载库:
System.loadLibrary("jmtp")
Run Code Online (Sandbox Code Playgroud)
将包含该文件的文件夹jmtp.dll直接放在Java项目下.
或者,我尝试了这个,它的工作原理:
System.setProperty( "java.library.path", "libs" );
Run Code Online (Sandbox Code Playgroud)
而"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)
Run Code Online (Sandbox Code Playgroud)
您需要在32位JDK上运行该程序才能使其正常工作.
| 归档时间: |
|
| 查看次数: |
31979 次 |
| 最近记录: |