Zum Inhalt springen

RS232 JavaComm


nougs

Empfohlene Beiträge

Hallo liebe Freunde/innen,

habe mal wieder einen Pbl mit dem Comport Kommunikation und zwar :

Es ist folgende Situation:

ich lesen ständig die Daten von dem Gerät,das sich an einem bestimmten Comport von meinem Rechner angeschlossen ist aus und speichere sie in einem Datenbank für die spätere Darstellung auf einer GUI.Dies soweit gut.

Aber ich mache nicht nur Lesen sondern muss ich auch Befehlen ( wie SendeStop usw..) an das Gerät im laufenden Betrieb senden können.Das problem wenn ich jedesmal versuche,bekomme ich immer die Exception:Java.lang.NullpointerException.

Weiß jemand woran das leigen könnte oder noch besser welche Lösungsansatz ich da benützen könnte?

Ich bedanke mich schon mal für jede Antwort.

nougs.

Link zu diesem Kommentar
Auf anderen Seiten teilen

*

* @param command

* : send a command to the zigbee-Node or intelliswitch

*/

private static SerialPort serialPort;

public static void sendCommand( final byte[] command){

new Thread(new Runnable() {

public void run() {

OutputStream outputStream;

try {

outputStream = serialPort.getOutputStream();

// send the first array of data.

outputStream.write(command);

outputStream.flush();

outputStream.close();

} catch (NullPointerException e) {

e.printStackTrace();

}catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

" target="_blank">/**

*

* @param command

* : send a command to the zigbee-Node or intelliswitch

*/

private static SerialPort serialPort;

public static void sendCommand( final byte[] command){

new Thread(new Runnable() {

public void run() {

OutputStream outputStream;

try {

outputStream = serialPort.getOutputStream();

// send the first array of data.

outputStream.write(command);

outputStream.flush();

outputStream.close();

} catch (NullPointerException e) {

e.printStackTrace();

}catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

und so benutze ich diese methode ausserhalb der Klasse:

cmd ist dabei einen byte array.

SerialPortConnection.sendCommand(cmd)" target="_blank">

cmd ist dabei einen byte array.

SerialPortConnection.sendCommand(cmd)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Von welchem Typ ist serialPortCon? Source?

Wieso schliesst Du den outputstream nach jedem Command?

Dir ist schon klar, dass Du mit einer seriellen RS232 eine blockierende, nicht vollduplexfähige Verbindung nutzt?

D.h. was macht der Rest Deines Programms, wenn das sendCommand() einen neuen Thread startet?

Wenn die hellblau markierte Zeile 144 ist, dann muss Deine private static SerialPort NULL als Ursache der Exception sein.

Wo wird die instanziert?

Link zu diesem Kommentar
Auf anderen Seiten teilen

>Von welchem Typ ist serialPortCon? Source?

serialPortConnection ist eien Klasse für sich.

>Wieso schliesst Du den outputstream nach jedem Command?

>Dir ist schon klar, dass Du mit einer seriellen RS232 eine blockierende,

> nicht vollduplexfähige Verbindung nutzt?

Nein,wusste ich nicht. Ich habe immer nach jedem Sendung(ich muss eine ACK-Telegram senden nach jedem Empfang) das stream geschlossen.

>D.h. was macht der Rest Deines Programms, wenn das sendCommand()

>einen neuen Thread startet?

ich bekomme diese Nullpointer Exception.

>Wenn die hellblau markierte Zeile 144 ist, dann muss Deine private static >SerialPort NULL als Ursache der Exception sein.

Ja,dies ist mir mitlerweile schon klar geworden.

Gäbe es eine möglichkeit mir den Benuzte SerialPort bereitzustellen,sodaß von außerhalb der klasse zugegriffen Wird?

Die Komplete Source ist angehängt.

Bearbeitet von nougs
Link zu diesem Kommentar
Auf anderen Seiten teilen

Scheint dass Du die RXTX-Bibliothek nutzt.

Das mit dem static für SerialPort und sendCommand() und so gefällt mir nicht!

- initConnection() setzt Deine private static serialport mit einer Instanz!

- der constructor SerialPortConnection(CommPortIdentifier port) ruft initConnection()

- den constructor rufst Du aus doConnection("COMx")

Wo rufst Du aber doConnection() von außen auf?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, ich benutze diese RXTX Bibliothek.Was anderes habe ich nicht gefundet.

Hier übergebe ich diese Methode an der Klasse Device weiter.

/**

* use to get the connection to the ZigBee node throught the Comport name.

* and process the communication between host and ZigBee-Node

* @param portName

*/

public static void connect(String portName){

try {

SerialPortConnection.doConnection(portName);

} catch (NoSuchPortException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}" target="_blank">

/**

* use to get the connection to the ZigBee node throught the Comport name.

* and process the communication between host and ZigBee-Node

* @param portName

*/

public static void connect(String portName){

try {

SerialPortConnection.doConnection(portName);

} catch (NoSuchPortException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

und dann mache ich einen Aufruf in einer kleinen Testklasse:

new Connection().connect("COM4");

" target="_blank">

new Connection().connect("COM4");

Dann fange ich an die daten auszulesen und quittiere ich die.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, das müsste passen, aber wenn Du an genau der Zeile mit

serialPort.getOutputStream() eine NullPointer bekommst,

dann muss bis dahin noch irgendetwas passieren oder eben nicht passieren, sonst wäre der StackTrace anders oder die Exception nicht.

Kannst Du mit Einzelschritt von anfang an debuggen. Um zu testen ob auch genau das erste Mal auch schon diese Exception auftritt. Oder eben eventuell erst später.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...