Synchronize-Problem in J2ME
-
Als ersters gleich meinen code....
class DataRead extends Thread { private Data dataclass = null; private StringBuffer data = null; public DataRead(Data dataclass,StringBuffer data) { this.dataclass = dataclass; this.data = data; } public void run() { while(true) { synchronized(this.data) { if(this.data.length()<1) { try { this.data.wait(); } catch(InterruptedException e) { dataclass.modules.bt.ShowError("InterruptedExeption: " + e.getMessage(),dataclass.modules.bt.main.get_list_deviceselect()); } } else { dataclass.DataReceived(); this.data.delete(0,data.length()); } } } } } class DataReceive extends Thread { private StringBuffer data = null; private DataInputStream datainput = null; private Data dataclass = null; private char zeichen = 0; private boolean empfangen = false; public DataReceive(Data dataclass,StringBuffer data,StreamConnection streamconnection) { this.dataclass = dataclass; this.data = data; try { this.datainput = streamconnection.openDataInputStream(); } catch(IOException e) { dataclass.modules.bt.ShowError("IOException:" + e.getMessage(),dataclass.modules.bt.main.get_list_deviceselect()); } } private boolean DataCompleted(StringBuffer data) { String temp = data.toString(); char trennzeichen = '.'; if(temp.indexOf(trennzeichen) == -1) { return false; } else { return true; } } public void run() { while(true) { synchronized(this.data) { try { if(datainput != null) { zeichen = 0; zeichen += datainput.readByte(); data.append(zeichen); } else { dataclass.modules.bt.ShowError("datainput = null",dataclass.modules.bt.main.get_textBox_testmodul()); } } catch(IOException e) { dataclass.modules.bt.ShowError("IOException(datareceive): " + e.getMessage(),dataclass.modules.bt.main.get_list_deviceselect()); } if(DataCompleted(data)==true) { this.data.notify(); } } } } }
Dieser Programmteil befasst sich mit dem Auswerten von Daten eines Inputstreams.
Die Daten sollen so lange in einen StringBuffer geschrieben werden, bis ein Punkt empfangen wird. Der Punkt soll als Abschlusszeichen für einen ganzen Befehl dienen.
DataReceive ist zuständig für das Empfangen der Daten. Sobald dann der Punkt empfangen wird, soll der erste Thread, mit dem Befehl notify, wieder aus dem Wartezustand aufgeweckt werden.
Als Synchronzize-Objekt nehme ich einen StringBuffer der der Klassa DataReceive und DataRead als Referenz übergeben wird.Mein Problem besteht darin, dass der Thread für DataRead bei jedem empfangen Zeichen aus dem Wartezustand aufgeweckt wird und nicht erst bei der Funktion "DataCompleted" wo data.notify() aufgerufen.
Wo könnte mein Problem liegen
mfg Jetzi
-
Schade - Crossposting: http://forum.javacore.de/viewtopic.php?p=20845#20845