SWT SWT und Threads

Status
Nicht offen für weitere Antworten.

jroxtheworld

Mitglied
Hallo zusammen

Habe eine kleine SWT-Applikation, die Rechenaufgaben anzeigt, die dann gelöst werden müssen. Dies geschieht dadurch, dass der User die Lösung in ein Textfeld schreibt und dann mit Button bestätigt. Der Listener dieses Buttons blendet die componente aus mit dispose und erstellt eine neue componente mit einer neuen Rechenaufgabe. Das funktioniert alles schon mal prima!

Jetzt möchte ich aber zusätzlich, dass die Aufgabe für 3 Sekunden dargestellt wird, und falls bis dahin der Button nicht gedrückt wurde, das ganze ebenfalls die gleichen Methode wie oben aufruft und automatisch weitergeht zur nächsten Aufgabe.

Habe mir das ganze mit Threads angeschaut, aber kriege keine vernünftige Lösung hin, da ich bisher einfach sobald die Aufgabe dargestellt wurde einen anderen Thread starte, der wartet 3 Sekunden und ruft dann die gleiche Methode auf wie der Button sonst. Aber dann sind irgendwie 2 Threads am laufen. Sobald ich den Button drücke werden 2 Aufgaben dargestell usw.

Hat mir hier irgendjemand einen besseren Ansatz?

Danke

Hier der Codeausschnitt

Java:
...
    display.getActiveShell().layout(); // aufgabe wird dargestellt
    getTask(buttonTrue).start(); // starte anderen 3-sek thread
}


public Thread getTask() {
		return new Thread() {

			Runnable r = new Runnable() {
				public void run() {
					checkResults(); // hier wird die componente disposed und eine neue erstellt	
				}
			};

			public void run() {
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				display.asyncExec(r);
			}
		};
	}
 
S

SlaterB

Gast
nochmal langsam, wenn ein Thread erstmal läuft und checkResults(); aufruft, wird dann automatisch der Code ganz oben ausgeführt, mit neuem Thread, also quasi eine Endloschleife?
und jedesmal, wenn du selber den Button klickst, wird auch ein neuer Thread gestartet, der ewig weiter läuft,
so dass dann zwei oder noch mehr ständig neue Aufgaben stellen?

dem Problem solltest du begegnen, indem du generell die ganze Zeit nur EINEN Thread verwendest, der auch nie ausläuft,
etwa so
Java:
run:

while (true) {

  warte(3000)
  // wenn Wartezeit unterbrochen, dann nochmal 3000 warten, 
  // entweder innere Schleife oder continue

  buttonKlick; // startet KEINEN weiteren Thread!
}
das Warten des Threads musst du bei einem eigenen Buttonklick unterbrechen,
mit InterruptedException oder wait/ notify,
lerne dazu Benachrichtigungskonzepte für Threads,
wichtig ist, dass der Thread dann wieder 3 Sekunden wartet und nicht vorzeitig selber den Button klickt

falls doch mal 3 Sekunden nix passiert und der Thread den Button klickt, musst du evtl. darauf achten, dass bei diesem Button-Klick der Thread nicht unnötig informiert wird (wie bei einem User-Klick),
evtl. schadet das aber auch gar nicht
 

jroxtheworld

Mitglied
Danke für die Antwort. Was ich jetzt aber nicht ganz schnalle ist das mit dem EINEN Thread. Die SWT GUI läuft ja in einem eigenen Thread (das ist ja so gegeben, ohne dass ich irgendwas threade...), wenn ich nun in diesm Ablauf ein Thread.sleep(3000) aufrufe wird die ganze GUI blockiert, weil der ganze Thread blockiert wird. Aber ich muss die GUI ja ansprechen können in den drei Sekunden.
 
S

SlaterB

Gast
ein separater Thread, mit Runnable und Thread.start() usw.,
beim Programmstart oder meinetwegen den ersten Button-Klick gestartet, aber nur einer, nicht mehr
 

jroxtheworld

Mitglied
Mein Problem ist ja eben das ...ich muss einen zusätzlichen Thread neben dem GUI-Thread starten um die 3-Sekunden herunterzuzählen, damit die GUI nicht blockiert wird. Sobald die drei Sekunden rum sind, sollte dieser Thread eigentlich eben die Methode aufrufen, damit es weiter geht. Aber er sollte eben wieder zurück in den GUI-Thread. Und falls der Button geklickt wird, sollte dieser parallele Thread gestoppt werden.

Das ganze ist bisschen schwierig zum umschreiben...

Thread1: GUI
Thread2: Timer
 

Wildcard

Top Contributor
Der Timer Thread ruft einfach eine Method auf wenn er fertig ist. Sollte irgendein Button (sorry, verstehe deine Logik nicht ganz) in der Zwischenzeit gedrückt worden sein, kannst du den Timer Thread eigentlich auch getrost vergessen und einfach ein boolean Flag setzen, damit die Methode die der Timer eigentlich aufrufen sollte keine Wirkung mehr zeigt. Du kannst natürlich auch den anderen Thread unterbrechen wenn dir das lieber ist, aber da er in deinem konkreten Fall ja gar nichts anderes tut als zu warten, spielt das IMO keine große Rolle, was immer dir leichter fällt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
G Nochmal Threads und Einfrieren des GUI :( AWT, Swing, JavaFX & SWT 10
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben