Alexander W.: Threads

Hallo,

ich entwickele eine Java-Anwendung für Windows. Dabei erstellen einige Instanzen (1) bestimmte Verbindungen... diese möchte ich in einem kleinen Protokoll/Statistik darstellen.

Diese Instanzen (1) haben statische Methoden die die aktuelle Anzahl von Verbindungen ausgeben. Diese möchte ich nun mit einem Thread alle 5s auslesen und in der GUI darstellen.

Wie machte ich dies am besten?

Vorschlag:
In Java MUSS jeder Thread eine Instanz einer Klasse sein. Das Problem ist nun,  dass ich irgendwie die Referenzen übergeben muss. Habe das nun wie folgt gemacht, was ich etwas unsauber finde:

public class ThreadStatistic extends Thread
{
 protected Label serverConnection, countOfConnectedClients;

public void setReference(Label connections, Label countOfConnectedClients)
 {
  this.serverConnection = connections;
  this.countOfConnectedClients = countOfConnectedClients;
 }

public void run()
 {
  while(true)
  {
   try
   {
    this.serverConnection.setText("frage anzahl ab");
    this.countOfConnectedClients.setText("frage anzahl ab");
    sleep(5000);
   }
   catch (InterruptedException exception)
   {
    // do nothing
   }
  }
 }
}

  1. Hej,

    Vorschlag:
    In Java MUSS jeder Thread eine Instanz einer Klasse sein.

    Und mehr noch: Es muss entweder eine Instanz der Klasse Thread sein oder Runnable implementieren und einem neuen Thread übergeben werden.

    Das Problem ist nun, dass ich irgendwie die Referenzen übergeben muss. Habe das nun wie folgt gemacht, was ich etwas unsauber finde:

    Also prinzipiell kannst du das so machen. Etwas sauberer wirds wenn deine GUI eher eine Methode anbietet

    void update(int serverConnections, int connectedClients ){  
      serverConnection.setText( Integer.toString( serverConnections ) );  
      countOfConnectedClients.setText( Integer.toString( connectedClients ) );  
    }
    

    die dann von ThreadStatistic aufgerufen wird, du also wenigstens die Labels in der entsprechenden GUI-Klasse kapselst. Ferner möchtest du unbedingt deinen Thread als Dämon starten.

    Diese Instanzen (1) haben statische Methoden die die aktuelle Anzahl von Verbindungen ausgeben. Diese möchte ich nun mit einem Thread alle 5s auslesen und in der GUI darstellen.

    Hier würde ich ansetzen. Wieso muss das so sein? Anstatt eines Threads würde ich eine einfache Controller-Klasse schreiben, die zum einen die Labels in der GUI verändern kann. Zum anderen hast du doch mit Sichereit eine Klasse die die Verbindungsinstanzen herstellt. Dieser Klasse würde ich diesen Controller als Listener hinzufügen. Sprich, wann immer eine neue Verbindung erzeugt oder beendet wird, wird der Controller informiert, dass es eine Veränderung gab und dieser gibt die Information an die GUI weiter.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz