java javax.comm - PullRequest
       30

java javax.comm

0 голосов
/ 06 июля 2011

Привет, я пытаюсь прочитать 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"); с полным путем, но у меня нет такой библиотеки, и я не знаю, где ее найти.

Ответы [ 2 ]

1 голос
/ 06 июля 2011

На сайте, на который вы ссылаетесь, есть инструкции по копированию двух собственных библиотек в каталог 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 может быть размещение их в каком-либо другом месте, а затем указание на этот каталог с помощью свойства системы 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>
0 голосов
/ 06 июля 2011

Страница, которую вы связали с , предлагает вам загрузить пакет 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

(Конечно, подставьте в каталог действительный каталог).

...