J2ME und Bluetooth - Problem mit flush()

split

Erfahrenes Mitglied
Hallo!

Die folgende Klasse einer J2ME-Anwendung ist für das Senden von Informationen an einen Bluetooth-Service (der auf einem Windows-Server läuft) zuständig. Eine Verbindung zum entsprechenden Service wurde bereits aufgebaut (ServiceRecord wird beim Erzeugen des Objekts übergeben).

Java:
import java.io.*;

import javax.bluetooth.*;
import javax.microedition.io.*;


public class Communicator {

	private ServiceRecord record;
	
	public Communicator(ServiceRecord record) {
		this.record = record;
	}
	
	public void send(String str) {
		try {

			StreamConnection con = (StreamConnection)Connector.open(record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
			OutputStream out = con.openOutputStream();
			out.write((str + '\n').getBytes());
			out.flush(); // scheint nicht zu funktionieren!

		} catch(IOException ex) {
			// auch eine Exception wird nicht geworfen!
			ex.printStackTrace();
		}
	}
	
}

Der Fehler: die flush()-Methode scheint keinen Effekt zu haben. Wird das Programm nämlich geschlossen, so werden die Daten versandt / "flush" wird ausgeführt. Auch ein out.close() bzw. con.close() hatte keinen Effekt. Ein Bug? Allerdings trat das gleiche Problem jetzt schon auf mehreren Handys auf...

Ich habe leider kaum Erfahrungen mit der Entwicklung mit Bluetooth, aber mal ehrlich: Was stimmt hier bitte nicht? ;)

Möglicherweise ergibt sich das Problem ja aus dem Zusammenspiel zwischen Windows und der Bluetooth-Implementierung des Handys? Ich hoffe, ihr könnt mir helfen :)



//EDIT:
Ich hab die Lösung gefunden, auch wenn ich keine Ahnung hab, wieso das so funktioniert und nicht anders:

Aus...
Java:
StreamConnection con = (StreamConnection)Connector.open(record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
			OutputStream out = con.openOutputStream();
			out.write((str + '\n').getBytes());
			out.flush(); // scheint nicht zu funktionieren!
wird...
Java:
StreamConnection con = (StreamConnection)Connector.open(record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
			DataOutputStream dout = new DataOutputStream(con.openOutputStream());
			dout.writeChars(str + '\n');
			dout.flush();
Wichtig hierbei war, dass auch serverseitig mit DataInputStream gearbeitet wird... Über eine Erklärung würde ich mich freuen, aber hauptsache es klappt...

PS: Dieser Link hat mich draufgebracht:
http://www.miniware.net/articles/viewarticle.php?id=22
(das erste Beispiel für J2ME-J2SE-Kommunikation, das bei mir funktioniert...)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück