Mismatched RXTX Versions

∥☆過路亽.° 提交于 2019-12-13 13:23:46

问题


I found a code to communicate in Java via Serial Port to an Arduino and wanted to try and get it working in order to expand on it for a project idea, but I keep getting this error

Stable Library
=========================================
Native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Java lib Version   = RXTX-2.1-7
WARNING:  RXTX Version mismatch
Jar version = RXTX-2.1-7
native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Could not find COM port.
Started

I think that it means there is jar mismatch for the RXTX library, but the link to the build in the native lib is a website is no longer there. I'm not exactly sure how to fix the problem. My code is below if you believe that is the issue. Any help would be appreciated.

import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.InputStream;
import java.util.Enumeration;

public class AraInterface {
SerialPort serialPort;
        /** The port we're normally going to use. */
        private static final String PORT_NAMES[] = { 
                        "/dev/tty.usbserial-A9007UX1", // Mac OS X
                        "/dev/ttyUSB0", // Linux
                        "COM35", // Windows //shin: ardu com port here
                        };
        private InputStream input;
        private OutputStream output;
        private static final int TIME_OUT = 2000;
        private static final int DATA_RATE = 9600;

        public void initialize() {
                CommPortIdentifier portId = null;
                Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

                while (portEnum.hasMoreElements()) {
                        CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
                        for (String portName : PORT_NAMES) {
                                if (currPortId.getName().equals(portName)) { 
                                        portId = currPortId;
                                        break;
                                }
                        }
                }

                if (portId == null) {
                        System.out.println("Could not find COM port.");
                        return;
                }

                try {
                        serialPort = (SerialPort) portId.open(this.getClass().getName(),
                                        TIME_OUT);

                        serialPort.setSerialPortParams(DATA_RATE,
                                        SerialPort.DATABITS_8,
                                        SerialPort.STOPBITS_1,
                                        SerialPort.PARITY_NONE);

                        input = serialPort.getInputStream();
                        output = serialPort.getOutputStream();

                        serialPort.addEventListener((SerialPortEventListener) this);
                        serialPort.notifyOnDataAvailable(true); 
                } catch (Exception e) {
                        System.err.println(e.toString());
                }
        }

        public synchronized void close() {
                if (serialPort != null) {
                        serialPort.removeEventListener();
                        serialPort.close();
                }
        }

        public synchronized void serialEvent(SerialPortEvent oEvent) {
                if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
                        try {
                                int available = input.available();
                                byte chunk[] = new byte[available];
                                input.read(chunk, 0, available);

                                String temp = new String (chunk);
                                String ref = "Hel";
                                if(temp.compareTo(ref)==0){
                                System.out.println("Hello World request received");
                                }
                                else{
                                System.out.println("lala" + temp);
                                }

                        } catch (Exception e) {
                                System.err.println(e.toString());
                        }
                }

        }

        public static void main(String[] args) throws Exception {
                AraInterface main = new AraInterface();
                main.initialize();
                System.out.println("Started");
        }
}

回答1:


  1. Check if you have installed the library. If not, in case of Ubuntu, sudo apt-get install librxtx-java
  2. If already installed, go to the path of the installation --- in my case /usr/share/java/RXTXcomm.jar
  3. If you are using Ubuntu or any Linux distro, remove any downloaded rxtx library from Eclipse build path, and add the path of the installed rxtx library in step 2. You can also copy it into your project.
  4. Check your java library property (System.getProperty("java.library.path")) to know the folder.
  5. Copy the librxtxSerial.so to the Java library path - in my case sudo cp -r /usr/lib/jni/librxtxSerial.so /usr/lib/x86_64-linux-gnu

After that try your code again.




回答2:


For 32/64 bit processors, installing RXTX taken from jlog websites leads to
rxtx version mismatch error

The most stable rxtx java library is taken from the following RXTX for Windows page and resolves the "version mismatch error".

RXTX (download) is only for 32 bit operating systems

Here rxtx-2.1-7 bins-r2.zip (binary column) is the right one to take. Let's hope these websites will not be taken down.




回答3:


I had the same problem on the exact same code, here's what I did to make it work. I am on MacOS.

The reason is because the version of "RXTXcomm.jar" library you've installed does not match the version that is needed (I believe from Arduino). Therefore, you need to install a matching version (2.2). You can download it from here (http://rxtx.qbang.org/wiki/index.php/Download), binary "rxtx 2.2pre2 (prerelease)".

Then you want to move this new version into your Java directory, which is hidden by default, but can be open easily with Terminal (MacOS) by the following code.

cd /Library/Java/Extension
open .

Move the file into the Extension folder. (Admin password will be required)

Restart BlueJ (the Java IDE i used), compile the code, and right click on the "mouse" module -> void main (string[] args) -> "OK". It should work by now.

For the second error, "could not find COM port". You just have to make sure you type in the correct COM port in your Java code. You can find the correct COM port at the bottom right corner of the Arduino window when the device is plugged in.



来源:https://stackoverflow.com/questions/22592188/mismatched-rxtx-versions

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!