panamahitek_arduino - La biblioteca de Java RXTX no carga la biblioteca nativa
rxtx java (3)
Esta es una explicación para su problema y una sugerencia para una solución.
RXTX tiene dos problemas principales en mi opinión:
- Dependiendo de su IDE, debe colocar la Mac:
RXTXcomm.jar
ylibrxtxSerial.jnilib
PC:RXTXcomm.jar
,rxtxSerial.dll
en la raíz del proyecto en su código IDE o Java, varía de IDE a IDE. La documentación aquí no cubre cómo hacerlo en diferentes IDE como NetBeans, IntelliJ incluso así logré que funcione tanto en Eclipse como en IntelliJ, pero no en NetBeans todavía. Todavía tengo otros problemas. - Dependiendo de su sistema operativo, incluso si obtiene este paquete y se ejecuta, en Windows 8.1 como ejemplo, tiene problemas para cerrar el puerto. Y la única solución es reiniciar su IDE / consola y reconectarse.
De cualquier manera, sugiero que vayas a un paquete con más problemas menos llamado JSSC
Aquí hay una lectura simple de datos del puerto serie usando 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);
}
}
}
- Ver todos los ejemplos de códigos JSSC
- El paquete se puede descargar aquí .
- Página de inicio de JSSC
Nota: Esta es una respuesta abierta, si alguno de ustedes tiene experiencia con respecto a esto, por favor contribuya editando la respuesta. He visto personas haciendo preguntas y teniendo casi el mismo problema con RXTX I en general.
Básicamente, quería escribir una herramienta de comunicación simple para mi Arduino usando la biblioteca RXTX para Java y fallar horriblemente a la hora de cargar la biblioteca dinámica.
Las especificaciones de mi sistema:
Sistema operativo: OS X Yosemite 10.10.3
Java: SDK 1.8.0_45
RXTX: 2.1-7r2 - versión modificada para intel mac que corre 64 bit java, que se puede encontrar aquí .
IDE: NetBeans 8
Comprobé que estos archivos funcionan siguiendo las instrucciones de instalación, que simplemente copian estos dos archivos en el directorio / Library / Java / Extensions.
Ahora quería eliminarlos y cargar la biblioteca desde mi aplicación. Hice lo siguiente:
- Agregue la biblioteca RXTXcomm al proyecto en netbeans.
- Incluya el contenedor de la biblioteca nativa en la propiedad "java.library.path" utilizando el siguiente fragmento de código
System.setProperty("java.library.path", location.getPath() + File.pathSeparator + System.getProperty("java.library.path"));
- Y carga la biblioteca usando
System.loadLibrary("rxtxSerial")
Cuando compilé el código e intenté ejecutarlo, me dio una
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
Ahora me pregunto qué he hecho mal (¿tal vez algún gran malentendido?)
¡Cualquier ayuda sería apreciada!
Estoy teniendo el mismo problema, pero creo que sé la causa.
Anteriormente tenía RXTX funcionando en OSX (Maverick) pero descubrí que necesitaba una funcionalidad solo disponible en Java 8 JDK. Instalé esto sobre el Java 6 JDK que estaba en la máquina y una vez completado no pude ejecutar ningún código que utilizara la biblioteca de RXTX.
Creo que el problema es que las versiones de JDK después de 6 no incluyen un entorno de 32 bits que es lo que RXTX requiere.
Si está utilizando un JDK más nuevo, le recomendaría instalar el Java 6 JDK y ver si esto resuelve su problema. Cuando ejecutaba mis programas compilados anteriormente, necesitaría incluir "-d32" para especificar el uso del entorno de 32 bits. es decir: "prueba java-d32"
Además de mi respuesta reciente esta .
Este es el código para eliminar el caché mencionado:
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);
}
Entonces, el problema no era la biblioteca rxtx sino mi propia falla al leer el documento de Java. Porque estoy seguro de que esto se menciona en algún lugar al principio.