0

嗨,我正在尝试读取 com 端口,所以我将库添加到我的 java 目录中,就像 他们在这里写的一样,但是当我使用简单的代码时

import java.util.Enumeration;
import javax.comm.*;

public class CompotCore {

    public static void main(String[] args) 
    {
        Enumeration list = CommPortIdentifier.getPortIdentifiers();
    }

}

我收到这样的错误:

java.lang.UnsatisfiedLinkError: no Serial in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
    at java.lang.Runtime.loadLibrary0(Runtime.java:840)
    at java.lang.System.loadLibrary(System.java:1047)
    at gnu.io.RXTXCommDriver.<clinit>(RXTXCommDriver.java)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at javax.comm.CommPortIdentifier.loadDriver(CommPortIdentifier.java:237)
    at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:109)
    at CompotCore.main(CompotCore.java:11)
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.comm.SunrayInfo.isSessionActive()Z
    at com.sun.comm.SunrayInfo.isSessionActive(Native Method)
    at com.sun.comm.Portmapping.registerCommPorts(Portmapping.java:155)
    at com.sun.comm.Portmapping.refreshPortDatabase(Portmapping.java:100)
    at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:138)
    at CompotCore.main(CompotCore.java:11)

我读到我必须添加System.load("Serial");完整路径,但我没有这样的库,也不知道在哪里可以找到它。

4

2 回答 2

1

在您链接到它的站点上,包含将两个本机库复制到您的 JRE lib 目录中的说明:

cp rxtx-bins.1/1.4/i386-pc-linux/libParallel.so /usr/java/j2sdk1.4.0/jre/lib/i386/
cp rxtx-bins.1/1.4/i386-pc-linux/libSerial.so /usr/java/j2sdk1.4.0/jre/lib/i386/

他们在吗?

确保将它们复制到正确的 JRE 中。which java告诉你什么?

复制到 jre/lib 的另一种方法是将它们放在其他位置,然后使用 System Property 指向该目录java.library.path,例如,您可以像这样执行 Java 来启动您的程序

java -Djava.library.path=<dir_with_those_libs> <your_other_args>

更新

好的,我下载了 rtxt tar 并查看了一下。解压后,您有以下内容(一个示例):

ls -l rxtx-bins.1/1.4/i386-pc-linux/
total 44
-rwxr-xr-x 1 root root  9700 Dec  5  2001 libParallel-1.4.15.so
lrwxrwxrwx 1 root root    21 Jul  6 03:23 libParallel.so -> libParallel-1.4.15.so
-rwxr-xr-x 1 root root 31400 Dec  5  2001 libSerial-1.4.15.so
lrwxrwxrwx 1 root root    19 Jul  6 03:23 libSerial.so -> libSerial-1.4.15.so

如果您按照该页面的说明进行操作,您将只复制链接,而不是实际的库。所以解决方案是复制所有文件,如下所示:

cp rxtx-bins.1/1.4/i386-pc-linux/* /usr/java/j2sdk1.4.0/jre/lib/i386/

或者执行Java类似:

java -Djava.library.path=~/rxtx-bins.1/1.4/i386-pc-linux:$LD_LIBRARY_PATH <your_other_args>
于 2011-07-06T07:00:57.750 回答
0

您链接到的页面可让您下载 RXTX 包。在该存档文件中,有不同平台所需的本机库。

您只需要确保 Java 可以找到您正在使用的操作系统的相关本机库。您可以通过在java.library.path系统属性中指定包含本机库的目录来做到这一点,您可以像这样在命令行上设置它:

java -Djava.library.path=C:\Folder\That\Contains\TheDLL CompotCore

对于 Linux,显然:

java -Djava.library.path=/folder/that/contains/the_so CompotCore

(当然,替换命令中的实际目录)。

于 2011-07-06T07:04:26.170 回答