包括Netbeans中的本地库

我正在尝试从java签名的applet中读取便携式设备….我在http://code.google.com/p/jmtp/w/list上找到了一个jmtp库来访问便携式设备,但是当我运行它时netbeans它给出了错误

    线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:java.library.path中没有jmtp
        在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        在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
    

我搜索并发现我必须在.jmtp项目中包含.dll文件作为本机库…我右键单击项目并导航到属性,然后选择“运行”和选定的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(); } } 

拜托,告诉我是什么问题

最后我找到了解决方案,为了包含本机库,我们需要在netbeans中添加以下步骤

      ==>右键单击项目
      ==>属性
      ==>点击RUN
      ==> VM选项:-Djava.library.path =“C:\您的目录,其中Dll存在”
      ==>确定
    

您还可以使用以下行从程序中加载库:

 System.loadLibrary("jmtp") 

将包含文件jmtp.dll的文件jmtp.dll直接放在Java项目下。

或者,我尝试了这个,它的工作原理:

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

而“libs”是包含dll的文件夹,直接放在java项目文件夹下。

我注意到jmtp.dll使用64位JDK提供以下exception:

 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%变量的串联。 所以我需要的是将我的库的位置添加到其中任何一个,问题就消失了。