Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module

Ich sitze mittlerweile seit fast einer Woche an diesem Problem und habe schon in etlichen Foren nach Hinweisen gesucht. Leider bis heute ohne Erfolg.

Das ist mein Problem: Ich versuche einen Befehl an ein Bluetooth HC-05 Modul zu senden, welches über einen virtuellen COM Port mit dem PC verbunden ist. In meinem Fall "COM4".

Ich benutze die RXTX Bibliothek um mich mit dem Serial Port zu verbinden. Das funktioniert auch ohne Probleme.

Java:
public static void main(String[] args) {
    portList = CommPortIdentifier.getPortIdentifiers();
    boolean portFound = false; 
    while (portList.hasMoreElements()) {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
             if (portId.getName().equals("COM4")) {
                 portFound = true;
                SimpleRead reader = new SimpleRead();
            }
        }
    }
}

@SuppressWarnings("restriction")
public SimpleRead() {
    try {
        serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
    } catch (PortInUseException e) {System.out.println(e);}
    try {
        serialPort.setOutputBufferSize(15);
        serialPort.setEndOfInputChar((byte)'\n');
        inputStream = serialPort.getInputStream();
        outputStream = serialPort.getOutputStream();
    } catch (IOException e) {System.out.println(e);} catch (UnsupportedCommOperationException e)
        e.printStackTrace();
    }
    try {
        serialPort.addEventListener(this);
    } catch (TooManyListenersException e) {System.out.println(e);}

    serialPort.notifyOnDataAvailable(true);
    try {
        serialPort.setSerialPortParams(300,
            SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1,
            SerialPort.PARITY_NONE);            
        serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
    } catch (UnsupportedCommOperationException e) {System.out.println(e);}
    serialPort.setRTS(true);
    serialPort.setDTR(true);
    serialPort.notifyOnDataAvailable(true);
    serialPort.setInputBufferSize(8192);
    serialPort.setOutputBufferSize(8192);

    writeThread = new Thread(new SerialWriter(outputStream));
    writeThread.start();

    readThread = new Thread(this);
    readThread.start();     
}

Das Problem tritt im Schreibe-Thread auf. Wenn die writeTo() Methode des ByteArrayOutputStream Objekts aufgerufen wird, bleibt das Programm einfach hängen, ohne eine Exception zu schmeißen.

Java:
public class SerialWriter implements Runnable{
OutputStream out;

public SerialWriter (OutputStream out)
{
    this.out = out;
}

public void run (){     
    try{
        Thread.sleep(500);
        while (true){
            out.flush();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            baos.write("AT\n".getBytes(Charset.forName("ASCII")));
            baos.writeTo(out); //<-- Here is my Problem. The program just hangs up
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }  
        }                
    }
    catch (IOException e){
        e.printStackTrace();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }            
}
}

Ich benutze Windows 8.1 in der 64bit Version.

Ich kann mich übrigens mittels HTERM Konsole mit dem Bluetooth Modul verbinden.

Ich bin für jeden Tip/Hilfe wirklich dankbar!!
 

kaoZ

Top Contributor
was passiert denn wenn du hier mal nicht nur eine InterupptedExeption einträgst sondern einfach mal allgemein Exception, wirft er dir dann irgendeine Exception aus ?

Java:
  } catch (InterruptedException e) {


EDIT : Quark ... hier in zeile 24 natürlic...trag einfach mal nur Exception ein und schau ob er dir irgendwas ausgibt

Java:
    catch (IOException e){
da du hier nur die Exception des sleeps abfängst dürfte klar sein das er dir keine Ausgabe der Ursache ausgibt, ist aber nur so ein gedankengang :)
 
Zuletzt bearbeitet:
Hallo kaoZ,

danke für deine Antwort. Ich werde das später mal testen.
Allerdings scheint das Programm nicht abzustürzen, sondern verharrt nur an der Methode writeTo().
 

dzim

Top Contributor
Laut dem hier, blockiert die Methode nicht beim Lesen, also blockiert dein OutputStream.
Das heisst, es kommen über den OutputStream des SerialPort-Objekts einfach keine Daten zum verarbeiten rein. Dein Problem liegt also demnach nicht in SerialWriter sondern in dem oberen Teil des Codes...
 
Das gleiche Problem tritt aber auch dann auf, wenn ich die Methode write() des Outputstreams direkt aufrufe. Muss ich dem Outputstream vorher noch irgendetwas mitteilen?
 
Ich habe auch schon das flush() eingebaut. Allerdings kommt das Programm ja gar nicht so weit, weil vorher das Programm ja schon beim write() stehen bleibt.
Ein flush() vor dem write() bringt übrigens auch nichts :-(
 

Maskin

Mitglied
Schon so versucht?

Code:
 while (true){
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            baos.write("AT\n".getBytes(Charset.forName("ASCII")));
            baos.writeTo(out); //<-- Here is my Problem. The program just hangs up
            baos.flush();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 

dzim

Top Contributor
Wie er schon sagt: es blokiert bei writeTo - flush wird nicht erreicht.
Aber wie ich schon sagte: Der OutputStream, der dort als Parameter angegeben wird blockiert das Ganze wahrscheinlich eher...
 
was könnte denn die Ursache sein, dass out blockiert wird? In meinem anderen Thread warte ich auf die Antwort des Moduls und frage jede Sekunde den InputStream ab. Mit dem Outputstream mache ich dort aber nichts.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
Meeresgott Input/Output OutputStream löscht Datei Allgemeine Java-Themen 7
F Jar OutputStream Allgemeine Java-Themen 4
D Java Process OutputStream ist null Allgemeine Java-Themen 4
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
L Abspeichern von OutputStream Allgemeine Java-Themen 6
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D zip Dateien schreiben mit in/outputstream Allgemeine Java-Themen 10
S OutputStream via POST senden Allgemeine Java-Themen 4
T OutputStream to InputStream Allgemeine Java-Themen 8
W StringBuilder effektiv auf OutputStream schreiben Allgemeine Java-Themen 3
Landei CipherInput/OutputStream-Problem Allgemeine Java-Themen 2
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S outputstream über fileUrl Allgemeine Java-Themen 15
L Problem mit dem OutputStream eines Prozesses Allgemeine Java-Themen 9
G OutputStream to System.out Allgemeine Java-Themen 35
I input-/outputstream Allgemeine Java-Themen 6
Junktyz In Writer und Outputstream wird teilweise nicht geschrieben Allgemeine Java-Themen 3
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
H Problem mit OutputStream Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
D Cipher(In)OutputStream Allgemeine Java-Themen 3
R Ladebalken für einen Outputstream. Allgemeine Java-Themen 10
J Binärdateien mit Input/Outputstream lesen und schreiben Allgemeine Java-Themen 3
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
T Problem mit Outputstream? Allgemeine Java-Themen 2
Aruetiise Methoden write() schreibt nicht alles Allgemeine Java-Themen 4
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
1 Check read/write permission for file Allgemeine Java-Themen 4
J write / read Problem Allgemeine Java-Themen 9
bj99 ImageIO.write() macht Probleme Allgemeine Java-Themen 7
R Welche Exception bei write() nehmen Allgemeine Java-Themen 7
W BufferedWriter.write() schreibt nicht Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben