Threads Thread innerhalb einer Klasse - ohne Extra Klasse

Pommes9485

Bekanntes Mitglied
Hallo,
wahrscheinlich schmeist mir Google bei dem richtigen Suchbegriff sofort die Antwort raus, allerdings weis ich nicht, wie dieser sein soll.
Ich habe eine GUI Klasse und muss in dieser dauerhaft überprüfen, ob sich ein Wert in einem Objekt der GUI Klasse geändert hat. Daher würde ich jetzt einfach einen Thread machen, in dem ich dies tue, allerdings weis ich nicht, wie ich diesen aufbauen sollte.

Könnt ihr mir sagen wie , oder wie ich was dazu finde ?

Danke schonmal
 
Was ist das für ein Objekt? Ein Datenobjekt? Oder wo kommt das her? ;( Aber generell weisst du doch an welchen Stellen / wann sich das Objekt verändern kann, du hast das ja schließlich programmiert, dort musst du dann eben irgend jemanden informieren über diese Änderung?!
 
Ja, es geht um ein Chat Programm. Nun möchte ich in der GUI natürlich die Nachricht angezeigt bekommen, wenn sie da ist. Aber in der Klasse, in der das Horchen auf neue Nachrichten Stattfíndet kann ich ja nicht auf die GUI zugreifen. Kann ich den nen Thread innerhalb der GUI Klasse erstellen ?
 
Prinzipiell kann man überall neue Threads aufbauen:
Code:
		new Thread( new Runnable(){
			@Override
			public void run() {
				// hier kommt die Aktion, die im neuen Thread laufen soll
				
			}}).start();
 
Ganz grundsätzlich suchst du nicht nach einem "Abfragethread", sondern nach dem Listener-Pattern, welches viel effizienter ist. Wenn du von GUIs sprichst, dann gibts da das MVC-Pattern (da hast du ein Model, eine View und einen Controller).
 
Danke an alle, ich habe mir auch den Observer mal angeguckt, allerdings müsste ich dann ja meine anderen Klassen auch anpassen, und das sind schon alles Threads, beides geht doch nicht oder ?

Ich habe jetzt nen Extra Thread geschrieben, also in der GUI Klasse, welche eine TextArea anpassen soll. Dies klappt nicht. Ich bekomme den Wert zwar zum richtigen Zeitpunkt über die Konsole ausgegeben, aber die TextArea verändert sich nicht...

Was gibt es noch für möglichkeiten ?
 
Was soll denn mit der Textarea passiern und in welchen Moment. Wenn du auf einen Button klickst?
Soll dann ein Text angezeigt werden ? Sollen Daten geändert werden oder eher nur etwas in der GUI- die Ansicht?



Hast du deinem view gesagt welches Model es observen soll?

Java:
getView.addObserver(model);

Hast du in den Methoden die aufgerufen werden:

Java:
setChanged();
setNotifyObserver(this);


grüße Spin
 
Ich habe wie gesagt einen LAN Chat und wenn in einem Thread sich eine Variable verändert, bzw sie unglich null ist, soll sie in der TextArea angezeigt werden. Parallel dazu wird von der GUI aer auch noch etwas anderes getan.

Ich kann den Observer nicht verwenden, da die betroffen Klassen bereits von Thread erben...
 
Dann würde ich dir folgendes vorschlagen.
Deine Gui implementiert ein Interface was eine UpdateMethode bereit stellt.
In etwa:
Java:
public interface GenericListener <T>{
 public synchronized void update(T wasAuchImmerGeupdatedWerdenMuss);
}
edit: ich habe das ganze mal um Generics erweitert.
Benutzung: in der Gui:
.... class ABC implements GenericListener<Datentyp>{ ....
Benutzung im ChatThread:
.... private GenericListener<Datentyp> listener; ....


Dein ChatThread hält eine Referenz auf eine Instanz dieses Listeners (wird übergeben).
Jedes Mal wenn sich nun etwas im Chat ändert ruft dieser die UpdateMethode im Listener (der GUI) auf und übergibt dort die neuen Werte.
 
Zuletzt bearbeitet:

Zurück
Oben