I
Isabelle
Gast
Hallo,
ich habe ein kleines Problem mit einem Thread. Ich habe eine Klasse Server, die Runnable implementiert. In der run-Methode sollen Datagrams versendet werden, die sich der Server in einer for-Schleife einzeln aus einem Vector holt und versendet. Um diese for-Schleife gibt es noch eine while(true)-Schleife, die garantiert, dass er nach der Abarbeitung von dem Vector nicht aufhört, sondern einfach wieder von vorne loslegt. Jetzt gibt es noch ein graphisches Interface (ein JFrame), mit dem man die Anzahl und den Inhalt der Pakete, die man senden will festlegen kann. Bevor also der Server in der run-Methode loslegt, gibt man hier die Daten ein. Wird ein Knopf (JButton) gedrückt, fängt der Server mit dem Senden an. Soweit funktioniert das ganze auch. Jetzt soll es noch einen zweiten Knopf geben, der den Server stoppen kann, um beispielsweise Pakete upzudaten oder zu löschen.
Der Code im User-Interface sieht so aus:
wobei sender eine Klassenvariable vom Typ Thread ist. Der Server fängt nun auch ganz brav an seine Sachen zu verschicken. Möchte ich nun aber ein Paket updaten, soll das Senden angehalten werden und eine Liste mit den verschiedenen Paketen gezeigt werden. Ich habe es zunächst damit versucht, dass ich eine Variable im Server, die sending heißt und Boolean ist, als Flag dient und die while-Schleife abbrechen kann. Das hat leider nicht geklappt. Dann wollte ich mit stop den Thread zwingen aufzuhören, was aber auch nicht funktioniert:
Abgesehen davon, dass die Methode natürlich veraltet ist. Hat hierzu jemand einen Tipp? Es besteht übrigens auch die Möglichkeit die Server-Klasse von Thread erben zu lassen, da sie von keiner anderen Klasse erben muss. Ich wollte mir nur noch nicht die Mühe machen alles umzustellen um dann festzustellen, dass es so auch nicht funktioniert. Aber wenn das eine Alternative wäre, ist es auch kein Problem. Ich hoffe mir kann jemand helfen, mit der Thread-Programmierung stehe ich nämlich ziemlich auf Kriegsfuß. Vielen Dank schon mal im Voraus,
Isabelle
ich habe ein kleines Problem mit einem Thread. Ich habe eine Klasse Server, die Runnable implementiert. In der run-Methode sollen Datagrams versendet werden, die sich der Server in einer for-Schleife einzeln aus einem Vector holt und versendet. Um diese for-Schleife gibt es noch eine while(true)-Schleife, die garantiert, dass er nach der Abarbeitung von dem Vector nicht aufhört, sondern einfach wieder von vorne loslegt. Jetzt gibt es noch ein graphisches Interface (ein JFrame), mit dem man die Anzahl und den Inhalt der Pakete, die man senden will festlegen kann. Bevor also der Server in der run-Methode loslegt, gibt man hier die Daten ein. Wird ein Knopf (JButton) gedrückt, fängt der Server mit dem Senden an. Soweit funktioniert das ganze auch. Jetzt soll es noch einen zweiten Knopf geben, der den Server stoppen kann, um beispielsweise Pakete upzudaten oder zu löschen.
Der Code im User-Interface sieht so aus:
Code:
//Konstruktor
public UserInterface(Server serv)
{
super("Identify Packets");
this.serv = serv;
sender = new Thread(serv);
pane = new JPanel(new GridLayout(0,2));
ready = new JButton("Send");
ready.addActionListener(this);
pane.add(ready);
update = new JButton("Update");
update.addActionListener(this);
pane.add(update);
setContentPane(pane);
}
//actionPerformed
if(button.getText().equals("Send"))
{
sender.run();
}
wobei sender eine Klassenvariable vom Typ Thread ist. Der Server fängt nun auch ganz brav an seine Sachen zu verschicken. Möchte ich nun aber ein Paket updaten, soll das Senden angehalten werden und eine Liste mit den verschiedenen Paketen gezeigt werden. Ich habe es zunächst damit versucht, dass ich eine Variable im Server, die sending heißt und Boolean ist, als Flag dient und die while-Schleife abbrechen kann. Das hat leider nicht geklappt. Dann wollte ich mit stop den Thread zwingen aufzuhören, was aber auch nicht funktioniert:
Code:
//actionPerformed
if(button.getText().equals("Update"))
{
sender.stop();
}
Abgesehen davon, dass die Methode natürlich veraltet ist. Hat hierzu jemand einen Tipp? Es besteht übrigens auch die Möglichkeit die Server-Klasse von Thread erben zu lassen, da sie von keiner anderen Klasse erben muss. Ich wollte mir nur noch nicht die Mühe machen alles umzustellen um dann festzustellen, dass es so auch nicht funktioniert. Aber wenn das eine Alternative wäre, ist es auch kein Problem. Ich hoffe mir kann jemand helfen, mit der Thread-Programmierung stehe ich nämlich ziemlich auf Kriegsfuß. Vielen Dank schon mal im Voraus,
Isabelle