Điểm:0

Làm cách nào để sửa lỗi java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier với libRXTX trên Ubuntu 20.04?

lá cờ us

Tôi có lỗi sau:

$ 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
xử lý tập tin lệnh push.txt
kết nối/dev/ttyUSB0 với 115200 baud, flowControl r
Ngoại lệ trong luồng "chính" java.lang.NoClassDefFoundError: gnu/io/CommPortIdentifier
    tại org.tc65sh.device.Device.connect(Device.java:56)
    tại org.tc65sh.Main.exec(Main.java:102)
    tại org.tc65sh.Main.main(Main.java:59)
Gây ra bởi: java.lang.ClassNotFoundException: gnu.io.CommPortIdentifier
    tại java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    tại java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    tại java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 3 nữa

Tôi đã cài đặt libRXTX và tất cả các tệp xuất hiện ở đúng vị trí:

$ ls -lA /usr/lib/jni/
tổng số 148
-rw-r--r-- 1 root root 22696 Ngày 9 tháng 5 năm 2018 librxtxI2C-2.2pre1.so
lrwxrwxrwx 1 root root 21 ngày 9 tháng 5 năm 2018 librxtxI2C.so -> librxtxI2C-2.2pre1.so
-rw-r--r-- 1 root root 14424 Ngày 9 tháng 5 năm 2018 librxtxParallel-2.2pre1.so
lrwxrwxrwx 1 root root 26 ngày 9 tháng 5 năm 2018 librxtxParallel.so -> librxtxParallel-2.2pre1.so
-rw-r--r-- 1 root root 22688 Ngày 9 tháng 5 năm 2018 librxtxRaw-2.2pre1.so
lrwxrwxrwx 1 root root 21 ngày 9 tháng 5 năm 2018 librxtxRaw.so -> librxtxRaw-2.2pre1.so
-rw-r--r-- 1 root root 22704 Ngày 9 tháng 5 năm 2018 librxtxRS485-2.2pre1.so
lrwxrwxrwx 1 root root 23 ngày 9 tháng 5 năm 2018 librxtxRS485.so -> librxtxRS485-2.2pre1.so
-rw-r--r-- 1 root root 59824 Ngày 9 tháng 5 năm 2018 librxtxSerial-2.2pre1.so
lrwxrwxrwx 1 root root 24 ngày 9 tháng 5 năm 2018 librxtxSerial.so -> librxtxSerial-2.2pre1.so

$ ls -lA /usr/share/java/ | grep RXTX
-rw-r--r-- 1 gốc gốc 63027 Ngày 9 tháng 5 năm 2018 RXTXcomm-2.2pre2.jar
lrwxrwxrwx 1 root root 20 ngày 9 tháng 5 năm 2018 RXTXcomm.jar -> RXTXcomm-2.2pre2.jar

Tôi có thể thấy đúng lớp bên trong tệp jar:

$ chuỗi /usr/share/java/RXTXcomm.jar | grep CommPortIdentifier
gnu/io/CommPortIdentifier.class
gnu/io/CommPortIdentifier.classPK

Làm cách nào tôi có thể giúp Java tìm lớp?

(Tôi đã thử thay đổi thứ tự tùy chọn thành 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 nhưng lỗi vẫn còn.)

Bodo avatar
lá cờ pt
Không liên quan trực tiếp đến vấn đề của bạn, nhưng việc chạy chương trình với tư cách `root` có thể là một rủi ro bảo mật. Nếu bạn không có quyền sử dụng `/dev/ttyUSB0` như một người dùng bình thường, bạn nên thêm người dùng đó vào nhóm sở hữu thiết bị tty. xem https://askubfox.com/a/133244/1186757
fadedbee avatar
lá cờ us
@Bodo, Vâng, bạn đúng, nhưng trước tiên tôi sẽ chạy nó, sau đó tôi sẽ sắp xếp các quyền.
Bodo avatar
lá cờ pt
Bạn đã biên dịch lại các nguồn hay bạn vừa chạy JAR nhị phân từ `tc65sh-1.4.0.zip`? Chỉ cần đoán: Đây có vẻ là một phần mềm khá cũ và tệp README cho biết "Java SE 6 phải được cài đặt trên máy của bạn để chạy TC65SH." Có thể có sự không tương thích giữa `tc65sh.jar` được biên dịch bằng Java 6 và `RXTXcomm.jar` có thể được biên dịch bằng phiên bản mới hơn hoặc thậm chí có thể đã thay đổi.
N0rbert avatar
lá cờ zw
Trước tiên hãy chạy `sudo usermod -a -G dialout $USER` sau đó khởi động lại và thử lại mà không có `sudo`.
fadedbee avatar
lá cờ us
@Bodo Tôi vừa chạy JAR nhị phân.
Điểm:0
lá cờ us

Giải pháp là sử dụng:

$ 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. Chính -p /dev/ttyUSB0 -b 115200 -f push.txt

Nó giải quyết vấn đề đầu tiên, nhưng bây giờ tôi chỉ còn lại:

$ 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. Chính -p /dev/ttyUSB0 -b 115200 -f push.txt
tc65sh v1.4.0
xử lý tập tin lệnh push.txt
kết nối/dev/ttyUSB0 với 115200 baud, flowControl r
Cảnh báo RXTX: Đang xóa tệp khóa cũ. /var/lock/LCK..ttyUSB0
khởi tạo thiết bị
buộc chế độ obex
java.io.IOException: thời gian chờ phản hồi obex sau 5001 ms và 33 byte
    tại org.tc65sh.device.Device.receiveObexResponse(Device.java:543)
    tại org.tc65sh.device.Device.openObexMode(Device.java:326)
    tại org.tc65sh.device.Device.obexOpenObexMode(Device.java:127)
    tại org.tc65sh.Main.exec(Main.java:110)
    tại org.tc65sh.Main.main(Main.java:59)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.