Score:0

วิธีแก้ไข java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier ด้วย libRXTX บน Ubuntu 20.04

ธง us

ฉันมีข้อผิดพลาดดังต่อไปนี้:

$ 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
ประมวลผลไฟล์คำสั่ง push.txt
กำลังเชื่อมต่อ /dev/ttyUSB0 กับ 115200 baud, flowControl r
ข้อยกเว้นในเธรด "หลัก" java.lang.NoClassDefFoundError: gnu/io/CommPortIdentifier
    ที่ org.tc65sh.device.Device.connect(Device.java:56)
    ที่ org.tc65sh.Main.exec(Main.java:102)
    ที่ org.tc65sh.Main.main(Main.java:59)
เกิดจาก: java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier
    ที่ java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    ที่ java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    ที่ java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ...อีก3

ฉันติดตั้ง libRXTX แล้วและไฟล์ทั้งหมดปรากฏในตำแหน่งที่ถูกต้อง:

$ ls -lA /usr/lib/jni/
รวม 148
-rw-r--r-- 1 รูทรูท 22696 9 พฤษภาคม 2018 librxtxI2C-2.2pre1.so
lrwxrwxrwx 1 รูทรูท 21 พฤษภาคม 9 2018 librxtxI2C.so -> librxtxI2C-2.2pre1.so
-rw-r--r-- 1 รูทรูท 14424 9 พฤษภาคม 2018 librxtxParallel-2.2pre1.so
lrwxrwxrwx 1 รูทรูท 26 9 พฤษภาคม 2018 librxtxParallel.so -> librxtxParallel-2.2pre1.so
-rw-r--r-- 1 รูทรูท 22688 9 พฤษภาคม 2018 librxtxRaw-2.2pre1.so
lrwxrwxrwx 1 รูทรูท 21 9 พฤษภาคม 2018 librxtxRaw.so -> librxtxRaw-2.2pre1.so
-rw-r--r-- 1 รูทรูท 22704 9 พฤษภาคม 2018 librxtxRS485-2.2pre1.so
lrwxrwxrwx 1 รูทรูท 23 9 พฤษภาคม 2018 librxtxRS485.so -> librxtxRS485-2.2pre1.so
-rw-r--r-- 1 รูทรูท 59824 9 พฤษภาคม 2018 librxtxSerial-2.2pre1.so
lrwxrwxrwx 1 รูทรูท 24 9 พฤษภาคม 2018 librxtxSerial.so -> librxtxSerial-2.2pre1.so

$ ls -lA /usr/share/java/ | เกรป RXTX
-rw-r--r-- 1 รูทรูท 63027 9 พฤษภาคม 2018 RXTXcomm-2.2pre2.jar
lrwxrwxrwx รูท 1 รูท 20 9 พฤษภาคม 2018 RXTXcomm.jar -> RXTXcomm-2.2pre2.jar

ฉันสามารถดูคลาสที่ถูกต้องภายในไฟล์ jar:

$ สตริง /usr/share/java/RXTXcomm.jar | grep CommPortIdentifier
gnu/io/CommPortIdentifier.class
gnu/io/CommPortIdentifier.classPK

ฉันจะช่วย Java ค้นหาคลาสได้อย่างไร

(ฉันได้ลองเปลี่ยนลำดับตัวเลือกเป็น 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 แต่ข้อผิดพลาดยังคงอยู่)

Bodo avatar
pt flag
ไม่เกี่ยวข้องโดยตรงกับปัญหาของคุณ แต่การเรียกใช้โปรแกรมในฐานะ "รูท" อาจมีความเสี่ยงด้านความปลอดภัย หากคุณไม่มีสิทธิ์ใช้ `/dev/ttyUSB0` เป็นผู้ใช้ทั่วไป คุณควรเพิ่มผู้ใช้ลงในกลุ่มที่เป็นเจ้าของอุปกรณ์ tty ดู https://askubuntu.com/a/133244/1186757
fadedbee avatar
us flag
@Bodo ใช่ คุณพูดถูก แต่ก่อนอื่นฉันจะทำให้มันทำงาน จากนั้นฉันจะแยกแยะการอนุญาต
Bodo avatar
pt flag
คุณคอมไพล์ซอร์สอีกครั้งหรือเพิ่งรันไบนารี JAR จาก `tc65sh-1.4.0.zip` แค่เดา: ดูเหมือนว่าจะเป็นซอฟต์แวร์ที่ค่อนข้างเก่า และไฟล์ README ระบุว่า "ต้องติดตั้ง Java SE 6 บนเครื่องของคุณเพื่อเรียกใช้ TC65SH" อาจมีความเข้ากันไม่ได้ระหว่าง `tc65sh.jar` ที่คอมไพล์ด้วย Java 6 และ `RXTXcomm.jar` ซึ่งอาจคอมไพล์ด้วยเวอร์ชันที่ใหม่กว่าหรือแม้กระทั่งอาจมีการเปลี่ยนแปลง
N0rbert avatar
zw flag
รัน `sudo usermod -a -G dialout $USER` ก่อน จากนั้นรีบูตและลองใหม่โดยไม่ใช้ `sudo`
fadedbee avatar
us flag
@Bodo ฉันเพิ่งรันไบนารี JAR
Score:0
ธง us

วิธีแก้ไขคือใช้:

$ 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 หลัก -p /dev/ttyUSB0 -b 115200 -f push.txt

มันแก้ปัญหาแรกได้ แต่ตอนนี้ฉันเหลือ:

$ 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 หลัก -p /dev/ttyUSB0 -b 115200 -f push.txt
tc65sh v1.4.0
ประมวลผลไฟล์คำสั่ง push.txt
กำลังเชื่อมต่อ /dev/ttyUSB0 กับ 115200 baud, flowControl r
คำเตือน RXTX: กำลังลบไฟล์ล็อกเก่า /var/lock/LCK..ttyUSB0
อุปกรณ์เริ่มต้น
บังคับโหมด obex
java.io.IOException: หมดเวลาตอบสนอง obex หลังจาก 5001 ms และ 33 ไบต์
    ที่ org.tc65sh.device.Device.receiveObexResponse(Device.java:543)
    ที่ org.tc65sh.device.Device.openObexMode(Device.java:326)
    ที่ org.tc65sh.device.Device.obexOpenObexMode(Device.java:127)
    ที่ org.tc65sh.Main.exec(Main.java:110)
    ที่ org.tc65sh.Main.main(Main.java:59)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา