RXTX与取决于其运行的操作系统的驱动程序一起工作。这些驱动程序提供了RXTX库,它们是:
librxtxSerial.so
和librxtxParallel.so
对于Linux。librxtxSerial.dll
和librxtxParallel.dll
对于Windows。librxtxSerial.jnilib
对于Mac
这个链接 具有正确安装这些驱动程序的说明,此问题: java.lang.unsatisfiedlinkerror:java.library.path中没有rxtxSerial 有一些解决方法可以解决此类例外。
但是,他们所有人都认为您可以访问%java_home%路径,或者您知道驱动程序的位置,如果您在计算机上工作,这很好,但是如果您需要分发应用程序,则不行。如果是这种情况,只需在同一文件夹中复制驱动程序文件 jar
放置。您必须看到这样的东西才能知道它正常工作:
Stable Library ========================================= Native lib Version = RXTX-2.1-7 Java lib Version = RXTX-2.1-7
更新
最近,我注意到Linux不包括当前的工作目录 java.library.path
财产。因此,如果您只是添加 librxtxSerial.so
进入应用程序文件夹,您仍然可以获得 UnsatisfiedLinkError
. 。再次,当您通过命令行运行应用程序时,您可以设置此属性:
java -jar -Djava.library.path=/path/to/lib
或者,您可以使用这里解释的骇人听闻方法: 以编程方式设置“ java.library.path”. 。这种方法是不安全的,如果您可以访问另一个解决方法,我不建议这样做,但是我已经尝试过并有效:
String javaLibraryPath = System.getProperty("java.library.path");
if(!javaLibraryPath.contains(File.pathSeparator + "." + File.pathSeparator)){
StringBuilder sb = new StringBuilder(javaLibraryPath).append(File.pathSeparator).append(".");
// The line above appends "." (current directory) to the library path
// Of course 'rxtxSerial.so' must be placed in the current directory
System.setProperty("java.library.path", sb.toString());
try {
Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);// Setting this field to null will force a reevaluation of
// the library path as soon as loadLibrary() is called
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}