Datum:
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?
private void open()
{
textBox.setString("versuche Port zu öffnen");
try
{
CommConnection cc= (CommConnection)Connector.open("comm:COM0");
textBox.setString("Port offen");
textBox.setString("Vor Port schließen");
cc.close();
textBox.setString("Port geschlossen");
}
catch(IOException io)
{
textBox.setString("Fehler " +io.getMessage());
}
}
|
Vielen Dank und liebe Grüße, Sannchen
Datum:
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:
private void open() { textBox.setString("versuche Port zu öffnen"); CommConnection cc = null; try { cc = (CommConnection)Connector.open("comm:COM0"); if (cc != null) { textBox.setString("Port offen"); textBox.setString("Vor Port schließen"); cc.close(); cc = null; textBox.setString("Port geschlossen"); } } catch(IOException io) { textBox.setString("Fehler " +io.getMessage()); } finally { if (cc != null) { cc.close(); } } } |
Datum:
Danke Läubi für deine schnelle Antwort!! Leider habe ich das Gerät nicht täglich zur Verfügung, daher dauert es jetzt wieder ein paar Tage bis ich das testen kann. Aber was meinst damit das ich testen soll, das der Port nicht null ist? Versteh ich nicht ganz. Danke! Liebe Grüße, Sannchen
Datum:
> Aber was meinst damit das ich testen soll, das der Port nicht null ist?
Ich vermute, Läubi meinte, Du sollst (wie in seinem Beispiel)
den Returnwert von Connector.open abprüfen. Könnte ja sein,
dass der Port gar nicht existiert, schon von einer anderen App
offen ist oder ein anderer Fehler beim Öffnen auftritt.
Datum:
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
Datum:
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.
Datum:
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;
}
Datum:
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!
Datum:
Hallo :) Ich hatte heute doch die Gelegenheit den Code von Läubi zu testen und es funktioniert! Der Port wurde scheinbar wirklich nicht geschlossen. Vielen Dank für eure Hilfe!! Liebe Grüße, Susi