Hallo
in meinem Hauptprogramm habe ich zwei weitere Threads TimeThread und ReceiveThread.
Der ReceiveThread soll auf eintreffende Meldungen warten und der Time Thread soll unabhängig vom User regelmässig daten requesten.
Ein Data-Object soll der gemeinsame Zugriff auf die synchronisation bieten (data.wait() data.notify())
Dabei soll natürlich der TimeThread nach einem Request darauf warten, bis eine Antwort (im RecieveThread) angekommen ist. Letzterer soll dies mit notify() bekanntgeben.
Das Hauptprogramm soll auf User-Abfragen auch Abfragen senden können (dies nur nebenbei)
Irgendwie blockiert das ganze, im Debuggen mit Breakpoints scheint es aber zu laufen.?
Hier mal dazu der wichtige Code:
in meinem Hauptprogramm habe ich zwei weitere Threads TimeThread und ReceiveThread.
Der ReceiveThread soll auf eintreffende Meldungen warten und der Time Thread soll unabhängig vom User regelmässig daten requesten.
Ein Data-Object soll der gemeinsame Zugriff auf die synchronisation bieten (data.wait() data.notify())
Dabei soll natürlich der TimeThread nach einem Request darauf warten, bis eine Antwort (im RecieveThread) angekommen ist. Letzterer soll dies mit notify() bekanntgeben.
Das Hauptprogramm soll auf User-Abfragen auch Abfragen senden können (dies nur nebenbei)
Irgendwie blockiert das ganze, im Debuggen mit Breakpoints scheint es aber zu laufen.?
Hier mal dazu der wichtige Code:
Java:
public class Main extends JPanel implements ActionListener {
LogData logData = new LogData();
public static void main(String[] args) {
frame = new JFrame();
frame.add(new Main());
.
.
}
public Main() {
.
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if (cmd.equals("Send")) {
try {
.
synchronized(data) {
.
udpClient.sendto(data, host, port);
.
}
.
} catch ..
.
}
.
}
// **************************************************************************************************
// Thread generation
// **************************************************************************************************
try {
new Thread(new TimeThread()).start();
new Thread(new RecieceThread()).start();
} catch (RuntimeException runtimeExeption) {
runtimeExeption.printStackTrace();
JOptionPane.showMessageDialog(this.getRootPane(), runtimeExeption.getMessage());
}
}
void showRecievedValues(byte[] rec) {
for (int i=0; i<rec.length; i++) {
recTextArea.append(Byte.toString(rec[i]) + " ");
}
}
void sendData(byte[] data) {
// Sende Daten
.
.
}
class TimeThread implements Runnable {
final byte[][] regRequests = {{0x20, 0x38}, {0x20, 0x39}, {0x20, 0x3a}, {0x20, 0x3b}, {0x20, 0x3c}, {0x20, 0x3d}};
@Override public void run() {
while (true) {
for (int i = 0; i < regRequests.length; i++) {
try {
synchronized(logData) {
sendData(regRequests[i]);
logData.wait();
}
Thread.sleep(1000); // sekundentakt
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class RecieceThread implements Runnable {
@Override public void run() {
int data;
while (true) {
byte[] rec = udpClient.receiveFrom(connectAddress, connectPort);
synchronized(logData) {
// Empfange daten und speichere sie ab
.
.
logData.notify();
}
}
}
}
}