Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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");
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 case
sudo cp -r /usr/lib/jni/librxtxSerial.so /usr/lib/x86_64-linux-gnu
After that try your code again.
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.
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.
You can build RXTX from Sources, e.g. GitHub-Arduino
and decide for yourself, how to deal with versions.
Binaries are here
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.