繁体   English   中英

UnsatisfiedLinkError-从jar文件访问dll文件

[英]UnsatisfiedLinkError - Accessing dll files from jar file

我正在使用Netbeans开发Swing应用程序。我正在为我的应用程序使用dll文件 我用下面的代码。 它在IDE中运行完美。

但是在清理并在IDE中构建后从jar文件运行时,它显示以下错误。

Exception in thread "main" java.lang.UnsatisfiedLinkError: no win32com in java.l
ibrary.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at test.Test.main(Test.java:78)

我的代码来设置路径。

private static void setPath() {
        try {
            System.setProperty("java.library.path", "./lib/win32/");
            Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
            fieldSysPath.setAccessible(true);
            fieldSysPath.set(null, null);

        } catch (IllegalAccessException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchFieldException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException e) {
        }
    }

我的主要方法

...
    setPath();
    try {
        System.loadLibrary("win32com");
    } catch (Exception e) {
        System.out.println(e);
    }

还有我的文件夹结构

在此处输入图片说明

要通过java code()访问dll文件,必须执行以下操作

(以我为例,获取通讯端口列表并与其中一个建立连接)

  1. 将dll文件( win32com.dll )放入jre bin文件夹
  2. javax.com.properties文件放置在jre lib文件夹中。

虽然效果很好,但是当您将其导出到Jar中并尝试在其他计算机上执行该操作时,仍然必须确保dll和properties文件是否位于其适当位置。

但是,作为替代,如果您将dll放置在另一个位置,则必须在导出到Jar文件之前将库路径设置为VM选项。

在Netbeans中,单击Project->右键单击Properties->选择Run->提供VM选项,例如

-Djava.library.path="D:\My Project\lib\win32" 

(如果dll文件位于D:\\ My Project \\ lib \\ win32中)

另外, 除了使用javax.com.properties文件之外,您还可以加载驱动程序,例如

   String driverName = "com.sun.comm.Win32Driver";
   CommDriver commdriver = (CommDriver) Class.forName(driverName).newInstance();
   commdriver.initialize();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM