Hallo,
ich habe ein Programm das Daten aus einem Socket ausliest und danach analysiert.
Klasse 1: Liest die Nachricht aus einer Socketverbindung aus. Diese Klasse ist ein Thread und beeinhaltet eine Endlosschleife in der die Daten ausgelesen werden.
Klasse 2: Analysiert die ausgelesene Nachricht. Diese Klasse ist auch ein Thread und für jede Nachricht wird ein extra Thread angelegt.
Ich habe folgendes Problem. Im Konstruktor der Klasse 1 gibt es das Objekt transpMsg. Diese Objekt wird hier noch korrekt gefüllt. Sobald aber der Thread gestartet wird, beinhaltet transpMsg andere Daten. Wenn ich in der Funktion startAnalyze() ein sleep(50) einfüge, funktioniert es einwandfrei.
Ich hoffe ich habe es einigermaßen verständlich formuliert.
Vielen Dank schon mal für eure Mühe.
Klasse 1
Klasse 2
ich habe ein Programm das Daten aus einem Socket ausliest und danach analysiert.
Klasse 1: Liest die Nachricht aus einer Socketverbindung aus. Diese Klasse ist ein Thread und beeinhaltet eine Endlosschleife in der die Daten ausgelesen werden.
Klasse 2: Analysiert die ausgelesene Nachricht. Diese Klasse ist auch ein Thread und für jede Nachricht wird ein extra Thread angelegt.
Ich habe folgendes Problem. Im Konstruktor der Klasse 1 gibt es das Objekt transpMsg. Diese Objekt wird hier noch korrekt gefüllt. Sobald aber der Thread gestartet wird, beinhaltet transpMsg andere Daten. Wenn ich in der Funktion startAnalyze() ein sleep(50) einfüge, funktioniert es einwandfrei.
Ich hoffe ich habe es einigermaßen verständlich formuliert.
Vielen Dank schon mal für eure Mühe.
Klasse 1
Java:
public class AntMessage extends Thread {
private static final Logger LOG = Logger.getLogger(AntMessage.class);
public AntMessage(Antenne ant, Service_Manager sm, Guardserver guard) {
this.sm = sm;
this.ant = ant;
this.guard = guard;
executor = Executors.newCachedThreadPool();
}
public void run() {
/*
Dieser ArrayList beinhaltet die Hexa Daten die von der Antenne gesendet werden
*/
Vector<String> hexMsg = new Vector<String>();
connect();
initializeSocket();
/*
Start der Endlos Schleife
Hier werden die Nachrichten der Antenne abgerufen
*/
while (!isInterrupted()) {
try {
int msg = readData();
/*
Übersetzung der Byte Nachricht in einen Hex String
*/
String hexdata = normalizeHexdata(msg);
String hexdata2 = "";
/*
Wenn die Nachricht vollständig ist beginnt sie immer mit "1f"
*/
if (msg == VAR_CMD_START) {
int msg2 = 0;
try {
msg2 = antInput.read();
hexdata2 = normalizeHexdata(msg2);
} catch (Exception ex) {
LOG.error(ex.getMessage());
ex.printStackTrace();
}
if (msg2 != VAR_CMD_START) {
//Wenn das zutrifft dann Startet hier immer die Nachricht
if (hexMsg.size() > 11) {
startAnalyze(new TranspMsg(hexMsg));
lastPing = new Date().getTime();
}
hexMsg.clear();
hexMsg.add(hexdata);
hexMsg.add(hexdata2);
} else {
//Zweimal 1F hintereinander
hexMsg.add(hexdata);
}
} else {
hexMsg.add(hexdata);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void startAnalyze(TranspMsg msg) {
//Analyse der Nachricht starten
final MessageAnalyse msa = new MessageAnalyse(msg, this);
//executor.execute(msa);
new Thread(msa).start();
try {
sleep(50);
} catch (InterruptedException ex) {
java.util.logging.Logger.getLogger(AntMessage.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Java:
public class MessageAnalyse implements Runnable {
public MessageAnalyse(TranspMsg transpMsg, AntMessage antMsg) {
synchronized (getClass()) {
this.transpMsg = transpMsg;
this.antMsg = antMsg;
this.ant = antMsg.ant;
this.guard = antMsg.guard;
this.sql = guard.sql;
this.dbCache=guard.dbCache;
}
if (transpMsg.isIsKeyboardinput()) {
System.out.println("KEYBOARD2 " + transpMsg.toString() + " " + this.transpMsg.toString());
}
}
@Override
public synchronized void run() {
/*
Ist die Nachricht eine "Message over the Air" dann springt das Programm in folgende Schleife.
*/
if (transpMsg.isIsKeyboardinput()) {
System.out.println("KEYBOARD3 " + this.transpMsg.toString() + this.toString());
}
Zuletzt bearbeitet von einem Moderator: