Puncte:0

Cum se remediază java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier cu libRXTX pe Ubuntu 20.04?

drapel us

Am urmatoarea eroare:

$ sudo java -jar /home/fadedbee/tc65sh-1.4.0/bin/tc65sh.jar -Djava.library.path=/usr/lib/jni/ -cp /usr/share/java/RXTXcomm.jar -p / dev/ttyUSB0 -b 115200 -f push.txt
tc65sh v1.4.0
procesarea fișierului de comandă push.txt
conectarea /dev/ttyUSB0 cu 115200 baud, flowControl r
Excepție în firul „principal” java.lang.NoClassDefFoundError: gnu/io/CommPortIdentifier
    la org.tc65sh.device.Device.connect(Device.java:56)
    la org.tc65sh.Main.exec(Main.java:102)
    la org.tc65sh.Main.main(Main.java:59)
Cauzat de: java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier
    la java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    la java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    la java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... încă 3

Am instalat libRXTX și toate fișierele apar în locurile corecte:

$ ls -lA /usr/lib/jni/
total 148
-rw-r--r-- 1 rădăcină rădăcină 22696 9 mai 2018 librxtxI2C-2.2pre1.so
lrwxrwxrwx 1 rădăcină rădăcină 21 mai 9 2018 librxtxI2C.so -> librxtxI2C-2.2pre1.so
-rw-r--r-- 1 rădăcină rădăcină 14424 9 mai 2018 librxtxParallel-2.2pre1.so
lrwxrwxrwx 1 rădăcină rădăcină 26 mai 9 2018 librxtxParallel.so -> librxtxParallel-2.2pre1.so
-rw-r--r-- 1 rădăcină rădăcină 22688 9 mai 2018 librxtxRaw-2.2pre1.so
lrwxrwxrwx 1 rădăcină rădăcină 21 mai 9 2018 librxtxRaw.so -> librxtxRaw-2.2pre1.so
-rw-r--r-- 1 rădăcină rădăcină 22704 9 mai 2018 librxtxRS485-2.2pre1.so
lrwxrwxrwx 1 root root 23 mai 9 2018 librxtxRS485.so -> librxtxRS485-2.2pre1.so
-rw-r--r-- 1 rădăcină rădăcină 59824 9 mai 2018 librxtxSerial-2.2pre1.so
lrwxrwxrwx 1 root root 24 mai 9 2018 librxtxSerial.so -> librxtxSerial-2.2pre1.so

$ ls -lA /usr/share/java/ | grep RXTX
-rw-r--r-- 1 rădăcină rădăcină 63027 9 mai 2018 RXTXcomm-2.2pre2.jar
lrwxrwxrwx 1 rădăcină rădăcină 20 mai 9 2018 RXTXcomm.jar -> RXTXcomm-2.2pre2.jar

Pot vedea clasa corectă în interiorul fișierului jar:

$ șiruri /usr/share/java/RXTXcomm.jar | grep CommPortIdentifier
gnu/io/CommPortIdentifier.class
gnu/io/CommPortIdentifier.classPK

Cum pot ajuta Java să găsească clasa?

(Am încercat deja să schimb ordinea opțiunilor în sudo java -Djava.library.path=/usr/lib/jni/ -cp /usr/share/java/RXTXcomm.jar -jar /home/fadedbee/tc65sh-1.4.0/bin/tc65sh.jar -p /dev /ttyUSB0 -b 115200 -f push.txt dar eroarea rămâne.)

Bodo avatar
drapel pt
Nu are legătură directă cu problema dvs., dar rularea programului ca „rădăcină” poate fi un risc de securitate. Dacă nu aveți permisiunea de a utiliza `/dev/ttyUSB0` ca utilizator normal, ar trebui să adăugați utilizatorul la grupul care deține dispozitivul tty. vezi https://askubuntu.com/a/133244/1186757
fadedbee avatar
drapel us
@Bodo, da, ai dreptate, dar mai întâi îl voi face să ruleze, apoi voi rezolva permisiunile.
Bodo avatar
drapel pt
Ați recompilat sursele sau doar ați rulat JAR-ul binar din `tc65sh-1.4.0.zip`? Doar o presupunere: acesta pare a fi un software destul de vechi, iar fișierul README afirmă „Java SE 6 trebuie să fie instalat pe computer pentru a rula TC65SH”. Ar putea exista o incompatibilitate între `tc65sh.jar` compilat probabil cu Java 6 și `RXTXcomm.jar` care ar putea fi compilat cu o versiune mai nouă sau chiar s-ar fi putut schimba.
N0rbert avatar
drapel zw
Rulați mai întâi `sudo usermod -a -G dialout $USER`, apoi reporniți și reîncercați fără `sudo`.
fadedbee avatar
drapel us
@Bodo Tocmai am rulat JAR-ul binar.
Puncte:0
drapel us

Soluția a fost folosirea:

$ sudo java -Djava.library.path=/usr/lib/jni/ -cp /usr/share/java/RXTXcomm.jar:/home/fadedbee/tc65sh-1.4.0/bin/tc65sh.jar org.tc65sh. Principal -p /dev/ttyUSB0 -b 115200 -f push.txt

Rezolvă prima problemă, dar acum am rămas cu:

$ sudo java -Djava.library.path=/usr/lib/jni/ -cp /usr/share/java/RXTXcomm.jar:/home/fadedbee/tc65sh-1.4.0/bin/tc65sh.jar org.tc65sh. Principal -p /dev/ttyUSB0 -b 115200 -f push.txt
tc65sh v1.4.0
procesarea fișierului de comandă push.txt
conectarea /dev/ttyUSB0 cu 115200 baud, flowControl r
RXTX Avertisment: Se elimină fișierul de blocare învechit. /var/lock/LCK..ttyUSB0
dispozitiv de inițializare
forțarea modului obex
java.io.IOException: expirarea timpului de răspuns obex după 5001 ms și 33 de octeți
    la org.tc65sh.device.Device.receiveObexResponse(Device.java:543)
    la org.tc65sh.device.Device.openObexMode(Device.java:326)
    la org.tc65sh.device.Device.obexOpenObexMode(Device.java:127)
    la org.tc65sh.Main.exec(Main.java:110)
    la org.tc65sh.Main.main(Main.java:59)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.