问题
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:
- Check if you have installed the library. If not, in case of Ubuntu,
sudo apt-get install librxtx-java
- If already installed,
go to the path of the installation --- in my case
/usr/share/java/RXTXcomm.jar
- 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.
- Check your java library property (
System.getProperty("java.library.path")
) to know the folder. - Copy the
librxtxSerial.so
to the Java library path - in my casesudo 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 torxtx 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