0

我正在使用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);
    }

还有我的文件夹结构..

在此处输入图像描述

4

1 回答 1

0

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

(在我的情况下,用于获取通信端口列表并与其中一个建立连接)

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

虽然它工作得很好,但是当你将它导出到一个 Jar 并尝试在其他机器上执行相同的操作时,你仍然必须确保 dll 和属性文件位于适当的位置。

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

在 Netbeans 中,单击项目--> 右键单击​​属性--> 选择运行-->提供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();
于 2013-11-15T07:29:17.120 回答