JavaME seriellen Port öffnen

#2653384
Lesenswert?

Hallo Leute!

Ich bin neu hier.
Ich programmiere zur Zeit ein Midlet für ein JavaME-fähiges 
Digitalfunkgerät.
Allerdings kann ich nur ab und zu den seriellen Port öffnen. Meist geht 
es nur einmal am Tag und dann streikt das Gerät bzw. wirft mir eine 
"IllegalArgumentException".
Der Port wird auch immer wieder geschlossen, aber diese Anweisung wirft 
eine NullPointerException, deswegen geh ich davon aus, dass der Port 
vorher gar nicht geöffnet wurde.

Hat jemand eine Idee an was das liegen kann, dass nur manchmal der Port 
erfolgreich geöffnet werden kann?
1
private void open() 
2
    { 
3
      textBox.setString("versuche Port zu öffnen");  
4
      try
5
        {  
6
          CommConnection cc= (CommConnection)Connector.open("comm:COM0");
7
            textBox.setString("Port offen");
8
   
9
            textBox.setString("Vor Port schließen");
10
            cc.close();
11
            textBox.setString("Port geschlossen");
12
        }
13
        catch(IOException io)
14
        {
15
           textBox.setString("Fehler " +io.getMessage());
16
        }
17
    }

Vielen Dank und liebe Grüße,
Sannchen
Persönliche Seite #2653423
Lesenswert?

Wenigstens hier:
Su Si schrieb:
> CommConnection cc= (CommConnection)Connector.open("comm:COM0");
solltest du mal prüfen ob der Port nicht null ist.

Außerdem wird der Port nicht geschlossen wenn eine IO Exception auftrat, 
besser so:
1
private void open() 
2
    { 
3
      textBox.setString("versuche Port zu öffnen");  
4
      CommConnection cc = null;
5
      try
6
        {  
7
        cc = (CommConnection)Connector.open("comm:COM0");
8
        if (cc != null) {
9
            textBox.setString("Port offen");
10
   
11
            textBox.setString("Vor Port schließen");
12
            cc.close();
13
            cc = null;
14
            textBox.setString("Port geschlossen");
15
        }
16
        }
17
        catch(IOException io)
18
        {
19
           textBox.setString("Fehler " +io.getMessage());
20
        } finally {
21
          if (cc != null) {
22
            cc.close();
23
          }
24
        }
25
    }
#2653694
Lesenswert?

Achso! Okay danke!
Ich würde es am liebsten morgen gleich testen, geht aber leider nicht :(

Aber dann hätte ich gleich eine weitere Verständisfrage.
Ich möchte in dem Programm dann über den Output Stream natürtlich Daten 
ausgeben. Musste heute aber feststellen, dass nur Integer gehen. Kann 
ich auch irgendwie Strings übergeben?
Und wie kann ich am PC diesen Output Stream empfangen? Wenn ich 
Hyperterminal auf den angeschlossenen Port öffne, dann kommt, dass 
dieser Port belegt ist.
Hab ich einen Denkfehler?

Danke!

Grüße,
Sannchen
Persönliche Seite #2653713
Lesenswert?

Su Si schrieb:
> Musste heute aber feststellen, dass nur Integer gehen. Kann
> ich auch irgendwie Strings übergeben?

Dafür gibt es die Klassen StreamReader/Writer. Alternativ kann man einen 
String auch einfach in Bytes zerlegen und diese dann über den Stream 
senden.

Su Si schrieb:
> Und wie kann ich am PC diesen Output Stream empfangen? Wenn ich
> Hyperterminal auf den angeschlossenen Port öffne, dann kommt, dass
> dieser Port belegt ist.

Dann solltest du schauen wer den Port belegt ;-)
Die beiden Geräte müssen natürlich per Kabel verbunden sein, auf dem 
selben Gerät geht es nicht es sei den dieses hat zwei Schnittstellen.

Allgemein wenn du mit Java arbeiten willst solltest du dir unabhängig 
von dem Problem ein paar Grundlagen aneignen.
Gast #2653716
Lesenswert?

The following example shows how a CommConnection would be used to 
discover available comm ports.

 String port1;
 String ports = System.getProperty("microedition.commports");
 int comma = ports.indexOf(',');
 if (comma > 0) {
     // Parse the first port from the available ports list.
     port1 = ports.substring(0, comma);
 } else {
     // Only one serial port available.
     port1 =ports;
 }
#2653735
Lesenswert?

okay mit den Klassen StreamReader/Writer habe ich mich noch nicht 
beschäftigt. Danke für den Tipp!!
Ich möchte in den Strings AT-Befehle übergeben. Hat schon mal jemand 
gemacht? Und hat vielleicht ein Stück Beispielcode?

okay, dann sollte ich das mal erforschen ;)
Die Geräte sind natürlich mit einem seriellen Kabel verbunden ;)
Das Funkgerät hat nur eine serielle Schnittstelle und das ist die COM0 
und ich frage im Programm auch den verfügbaren Port ab. Dennoch Danke 
für den Codeschnipsel!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren