-->

包括Netbeans的本地库(Including Native Library in Netbean

2019-06-18 11:29发布

我想读从Java签名的小的便携设备....我发现一个jmtp库http://code.google.com/p/jmtp/w/list以访问便携式设备,但是当我运行它在NetBeans的提示错误

      异常线程“main” java.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     

我搜索,发现我必须包括.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();

    }
}

请告诉我是什么问题

Answer 1:

最后我找到了解决办法,为包括本地库,我们需要添加在NetBeans以下步骤

       ==>右键单击项目       ==>属性       ==>点击运行       ==> VM选项:-Djava.library.path = “C:\您的指南,其中DLL被本”       ==>确定     



Answer 2:

您也可以使用该行的程序中加载库:

System.loadLibrary("jmtp")

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

另外,我想这和它的工作原理:

System.setProperty( "java.library.path", "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运行程序进行这个工作。



Answer 3:

与此挣扎了一会儿后,我找到了一个工作解决问题的办法。

我用System.out.println(System.getProperty("java.library.path")); 我的代码中找出实际值java.library.path是我的系统上。 这是至少的串联%PATH%的系统和用户环境变量变量。 因此,所有我需要的是增加我的库的位置要么那些和问题走了。



文章来源: Including Native Library in Netbeans