RS232 - UnsatisfiedLinkError: no rxtxSerial

Bobo222

Mitglied
Hallo Leute,

ich habe folgende Exception-fehler(oder wie man das nennt):
Code:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
	at java.lang.ClassLoader.loadLibrary(Unknown Source)
	at java.lang.Runtime.loadLibrary0(Unknown Source)
	at java.lang.System.loadLibrary(Unknown Source)
	at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
	at connection.RS232_Conn.open(RS232_Conn.java:32)
	at connection.MainFrame$my_Listener.actionPerformed(MainFrame.java:48)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


Code:
Java:
package connection;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.IOException;
import java.io.InputStream;

public class RS232_Conn implements SerialPortEventListener {
	private CommPortIdentifier portId;
	private SerialPort serialPort;
	private InputStream inputStream;
	private int baudrate;
	private boolean open_success = false;
	private boolean close_success = true;

	public void serialEvent(SerialPortEvent event) {
		System.out.println("serialPortEventlistener");
		if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
			serialPortDatenVerfuegbar();
		}
	}
	
	public RS232_Conn(int baudrate) {
		this.baudrate = baudrate;
	}
	
	public void open() {
		if (close_success == true) {
			try {
				portId = CommPortIdentifier.getPortIdentifier("COM1");
				serialPort = (SerialPort) portId.open("Bluetooth_Modul", 2000);
				serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8,
						SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
				serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

				inputStream = serialPort.getInputStream();

				serialPort.enableReceiveTimeout(1000);
				serialPort.notifyOnDataAvailable(true);
				serialPort.addEventListener(this);

				open_success = true;
				close_success = false;
				System.out.println("Open Serialport");
			} catch (Exception e) {
				System.out.println(e);
			}
		} else {
			System.out.println("Serialport already opened");
		}
	}

	public void close() {
		if (open_success == true) {
			System.out.println("Close Serialport");
			serialPort.close();
			open_success = false;
			close_success = true;
		} else {
			System.out.println("Serialport already closed");
		}
	}
	
	public void serialPortDatenVerfuegbar() {
		 	byte[] read_buffer = new byte[20];
			try {
				while (inputStream.available() > 0) {
					int empfangen = inputStream.read(read_buffer);
					System.out.println(empfangen);
				}
			} catch (IOException ioe) {
				System.out.println(ioe);
			}
			String nachricht = new String(read_buffer);
	        System.out.println(nachricht);
	}
}

Ich habe zwar gegoogelt, aber hat mir leider nicht wirklich weitergeholfen. Kann mir jemand bei dem Problem weiterhelfen bitte?

mfg
 
Zuletzt bearbeitet:
Danke, aber das habe ich doch gemacht:

Project/Properties/Java Build Path/Add External JARs --> "RXTXcomm.jar" geaddet.

Ist das nicht das?
 
Danke!

Naja ich verwende ja eclipse. Ich drücke auf den grünen play Button da oben und dann erscheint halt das selbst gemachte Fenster mit dem ON und OFF button. Beim On-Button wird halt das open() ausgeführt und dann kommt der Stackrace bei close() ist alles in Ordnung.

Ich bin gerade etwas verwirrt. Warum muss ich jetzt irgendwas mit der nativen Library einstellen?

Sowas hatte ich noch nie, normalerweise, wenn man eine Bilbiothek von was auch immer einfügen will, mache ich das dann, wie ich in meinen letzten Beitrag beschrieben habe und alles funktioniert.

Ich verstehe nicht ganz.
 
Moin,

sorry, aber ist natürlich schwer nachzuvollziehen, was Du wo eingestellt hast oder eben auch nicht ...

Klick' mal neben dem grünen Button (ich hoffe Du einst "Konfiguration ausführen") auf den Pfeil und wähle "Konfiguration verwalten". Dann links im Baum Dein Projekt anklicken und dann rechts den Reiter "Klassenpfad". Dort sollte nu8n wieder Dein Projekt auftauchen. Öffne es und Du solltest Dann darunter die LIBs aus dem Klassenpfad sehen.
Ist dort die Bibliothek angegeben?
Poste ggf. mal eine ScreenShot davon !

Gruß
Klaus
 
Danke! Ja da ist eine Library drinnen(siehe bild). Das Schwarze ist einfach der Pfad zum eclipse-Workspace und im Projektordner "Bluetooth" ist diese .jar.
 

Anhänge

  • java_problem.png
    java_problem.png
    76,3 KB · Aufrufe: 62
Zuletzt bearbeitet:
hmm,

da taucht sie vermutlich auch im "PaketExplorer" unter "Referenzierte Bibliotheken"auf, oder ?

Nutzt Du eine Manifestdatei?
Dort sollte sie dann auch im Classpath ein getragen sein ...

Und die Exception kommt nur, wenn Du Dein Programm, wie du beschrieben hast, aufrufst?

Gruß
Klaus
 
hmm, da taucht sie vermutlich auch im "PaketExplorer" unter "Referenzierte Bibliotheken"auf, oder ?

Ja, hier taucht sie auch auf.

Nutzt Du eine Manifestdatei?
Dort sollte sie dann auch im Classpath ein getragen sein ...

Hm, in einer Manifestdatei stehen ja Zusatzinfos, der Library right? Wo wird die Datei gespeichert? Im Projektordner? Falls ja, dort ist keine zu finden.

Und die Exception kommt nur, wenn Du Dein Programm, wie du beschrieben hast, aufrufst?

Ja, genau.(also anders wüsste ich es auch nicht, wie ich sonst das Programm starten könnte)
 
Moin,

Ja, hier taucht sie auch auf.
ok 🙂

Hm, in einer Manifestdatei stehen ja Zusatzinfos, der Library right? Wo wird die Datei gespeichert? Im Projektordner? Falls ja, dort ist keine zu finden.
Wenn ja, dann dort ... Du brauchst sie aber wohl nur, wenn eine JAR-Datei erzeugen willst!

Ja, genau.(also anders wüsste ich es auch nicht, wie ich sonst das Programm starten könnte)
nun ja, halt in der CMD-Box ... etwa so wie hier beschrieben:
Galileo Computing :: Java ist auch eine Insel - 19 Die Werkzeuge des JDK

-----------------------------

Mal ganz dumm gefragt: der angegebene Pfad stimmt? Keine Tippfehler= Groß-/Kleinschreibung etc. ?


Schau mal in die Umgebungsvariablen des Rechners (meist unter "Systemvariablen"): auch dort sollte Pfad , in dem die zugehörige jar-Datei liegt, eingetragen sein ...

Gruß
Klaus

[EDIT]
Da ich diese LIB nicht kenne (nutze "SerialIO"), habe noch mal kurz gegoogled:

rxtx - java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path - Stack Overflow
eclipse - How to add rxtxSerial in java.library.path? - Stack Overflow
fedora - java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver - Stack Overflow
------
dies sieht sehr gut aus 🙂
http://www.java-forum.org/allgemein...ttstelle-ansteuern-processing-bibliothek.html

[/EDIT]
 
Zuletzt bearbeitet:
Danke dir!

Also bei der Umgebungsvariable "Path" da steh keinen Pfad, der mit Java/eclipse zusammenhang hat. Welchen Pfad soll ich denn da jetzt dazufügen? Den Projekt-Pfad, wo die RXTXcomm.jar drinnen ist?

Und warum muss ich das machen? Muss ich das immer machen, wenn ich eine externe Library einfüge?
 
Moin,

ich habe mir auch den letzten Link, den ich zuvor gepostet hatte, nochmal zu Gemüte geführt!
Dabei fiel mir folgendes auf:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
	at java.lang.ClassLoader.loadLibrary(Unknown Source)
Das enstscheidende Wort ist loadLibrary, d. h. es wird hier nicht versucht, eine jar-datei zu laden, sondern die "rxtxSerial.dll" !!!
Dies ist die LIB, für den nativen Zugriff auf das OS rsp. die seriellen Schnittstellen.
Wo liegt die bei Dir?

Ggf. falls mal nach C:\Windows\system32 kopieren!

Gruß
Klaus
 
Danke!

Die .dll-datei gehört auch ins java/bin-verzeichnis und jetzt kommt folgender stack-trace:

Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
gnu.io.NoSuchPortException

Also es funktionieret schonmal, nur findet er keinen Port. Ich arbeite auf einen Laptop, der keinen ComPort hat, kann ich das irgendwie einstellen, dass sich das ganze auf einen USB-Port beziehen soll, ist doch auch seriell.
 
Moin,

Also es funktionieret schonmal, nur findet er keinen Port. Ich arbeite auf einen Laptop, der keinen ComPort hat, kann ich das irgendwie einstellen, dass sich das ganze auf einen USB-Port beziehen soll, ist doch auch seriell
Also, wie ich schon schrieb, ich kenne diese spezielle LIB nicht !!

Aber wenn ich raten müsste, würde ich sagen JA!
Wir nutzen hier in der Firma "SerialIO" ... und ich speziell, um auf Null-Modem-Kabel, die auf verschiedenen USB-Ports hängen (können), zuzugreifen.
Dazu habe ich mir eine eigene Klasse erstellt, an die ich dann die ComPort-Nummer (ggf. eben aucheine USB-Schnittstelle) sowie Bitrate, Start- und Stop-Bits sowie KNZ für Parität und HandShaking übergeben kann.

Ob und inwieweit dies mit Deiner LIB geht, weiß ich nicht!
Schau' doch einfach in die Doku oder API 😛ueh: 😉

Gruß
Klaus
 
Unter windows kannst du im gerätemanager beim gewünschten usb-anschluss normalerweise den port auswählen.
mit welchem gerät willst du kommunizieren? ist der chiptreiber installiert bzw. wird das gerät korrekt erkannt? soweit ich weiß gibt es unterschiedliche chips zum umstetzen von usb auf com.

lass dir mal alle verfügbaren ports ausgeben. mit
Code:
CommPortIdentifier.getPortIdentifiers()
sollte das möglich sein.

viel erfolg
 
Also das Gerät habe ich leider nicht da, aber ich will mit irgendeinen Terminal das Gerät ersetzen. Ich denke das kann man ja machen oder?

Weiß jemand wie ich das machen könnte? Mit Terminal irgendwie auf virtuellen COM-port zugreifen und dann in java das einstellen.
 
Hm ich verstehe leider nicht genau was du machen willst.

Wenn du kein gerät verbunden hast kannst du klarerweise keine kommunikation starten.
zum testen emuliere ich eigentlich selten schnittstellen, die kommunikation läuft ja über bereits vorhandene protokolle. wenn du wissen willst ob du korrekt sendest und empfängst kannst du direkt mit dem io stream arbeiten.

zum emulieren:

Link

hier wird genau diese frage erörtert.

hab ich deine frage richtig verstanden und beantwortet oder meinst du etwas anderes?

viel erfolg
 

Neue Themen


Zurück
Oben