我正在使用 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);
}
我的文件夹结构..
答案 0 :(得分:0)
要通过java代码()访问dll文件,必须执行以下操作
(在我的情况下,获取通讯端口列表并与其中一个建立连接)
虽然它运行良好,但是当你将它导出到Jar并尝试在其他机器上执行时,仍然必须确保dll和属性文件位于适当的位置。
但是,作为Alternate,如果你将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();