Reputation: 512
Basically i wanted to write a simple communication tool for my Arduino using the RXTX Library for java and failed horribly when it came to loading the dynamic library.
My system specs:
OS: OS X Yosemite 10.10.3
Java: SDK 1.8.0_45
RXTX: 2.1-7r2 - modified version for intel mac running 64 bit java, which can be found here.
IDE: NetBeans 8
I checked, that these files work by following the install instructions, which is simply copying these two files into the /Library/Java/Extensions directory.
Now I wanted to remove them and load the library from my application. I did the following:
System.setProperty("java.library.path",
location.getPath() + File.pathSeparator + System.getProperty("java.library.path"));
System.loadLibrary("rxtxSerial")
When I compiled the code and tried to run it, it gave me an
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
Now I'm wondering what i have done wrong (maybe some great misunderstanding?)
Any help would be appreciated!
Upvotes: 3
Views: 4308
Reputation: 512
In addition to my recent reply this one.
This is the code to delete the mentioned cache:
try {
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (NoSuchFieldException |
SecurityException |
IllegalArgumentException |
IllegalAccessException ex) {
ex.printStackTrace(System.err);
}
So the issue was not the rxtx library but rather my own failure to read the java doc. Because I'm sure this is mentioned somewhere right at the beginning.
Upvotes: 0
Reputation: 11
I am having the same issue, but believe that I know the cause.
I previously had RXTX functioning on OSX (Maverick) but found that I required functionality only available within the Java 8 JDK. I installed this over the Java 6 JDK that was on the machine and once completed was unable to run any code utilizing the RXTX library.
I believe the issue is that JDK releases after 6 do not include a 32 bit environment which is what RXTX requires.
If you are using a newer JDK then I would recommend installing the Java 6 JDK and seeing if this resolves your issue. When previously running my compiled programs I would need to include "-d32" to specify to utilize the 32 bit environment. ie: "java -d32 test"
Upvotes: 1
Reputation: 33437
This an explanations to your problem and a suggestion to a solution.
RXTX has two major problems in my opinion:
RXTXcomm.jar
and librxtxSerial.jnilib
PC: RXTXcomm.jar
, rxtxSerial.dll
on the root of the project in your IDE or Java code, it varies from IDE to IDE. The documentation here does not cover how to do it in different IDE like NetBeans, IntelliJ even thus I got it to work on both Eclipse and IntelliJ, but not NetBeans yet. I still have other issues.Any way I suggest you going over to a more problem less package called JSSC
Here is a simple reading data from serial port using JSSC:
public class Main {
public static void main(String[] args) {
SerialPort serialPort = new SerialPort("COM1");
try {
serialPort.openPort();//Open serial port
serialPort.setParams(9600, 8, 1, 0);//Set params.
byte[] buffer = serialPort.readBytes(10);//Read 10 bytes from serial port
serialPort.closePort();//Close serial port
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
Note: This is an open answer, if any one of you have experience regarding this please contribute by editing the answer. I have seen people asking question and having almost same problem with RXTX I general.
Upvotes: 1