Swing Threads und das Ändern des Hintergrundes ...

Status
Nicht offen für weitere Antworten.

StifMB

Mitglied
Hallo alle zusammen!

Mein Problem ist folgendes: Ich habe ein JPanel, das auf einen JFrame liegt. Das ganze wird geöffnet und enthält dazu noch einen JButton. Nun möchte ich, das wenn der Button gedrückt wurde, sich der Hintergrund nach ein paar Sekunden ändert. Dazu gibt es eine Funktion die
Code:
start()
heißt. Sie sieht wie folgt aus:
Java:
public void start() {
	waitFor(2000);
	setColor(Color.WHITE);
	waitFor(2000);
	setColor(Color.RED);
	waitFor(2000);
	setColor(Color.BLUE);
}
Die Funktion
Code:
setColor(Color c)
ist dabei selbst definiert und macht nicht mehr als
Code:
Panel.setBackground(Color c)
. Um zu warten nutze ich die Funktion
Code:
waitFor()
:

Java:
public void waitFor(long milliseconds) {
	try {
		Thread.currentThread();
		Thread.sleep(milliseconds);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}

Nun passiert folgendes: Nichts. Das heißt, der Thread wird angehalten, das merkt man, da der Button gedrückt bleibt und nicht weiter reagiert, zumindest solange bis die 6 Sekunden um sind. Dann ist das Panel hübsch blau und alles geht wieder. Allerdings passiert dazwischen nichts, zumindest nicht sichtbar. Selbst
Code:
repaint()
oder so etwas funktioniert nicht.
Setzte ich das ganze aber nun in mein Objekt, das über
Code:
new MainClass()
aufgerufen wird, klappt es wie gewollt:

Java:
public class MainClass extends JFrame implements ActionListener {

	public MainClass() {
		...
		setVisible(true);
		start();
	}
}

Ich nehme ja an, dass es etwas mit
Code:
currentThread zu tun hat. Wird das Frame aufgebaut, ist klar welcher Thread es ist, aber scheinbar nicht wenn ich nur
Code:
start()
aufrufe ... ich kenne mich leider mit Threads nicht so sehr aus. Was kann ich machen, damit das ganze richtig funktioniert? Oder hat jemand eine bessere Idee, wie man das ganze realisieren kann?

MFG Stif
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Wenn du start() im ActionListener aufrufst, befindest du dich im Thread EventDispatchThread (auch EDT genannt). Dieser ist für die Komplette GUI, das malen der GUI, die Events (zu denen auch der actionPerformed-Aufruf gehört) usw. verantwortlich. Alle diese Sachen arbeitet er nacheinander ab. (Logisch, es ist ja auch nur ein Thread. Ein einzelner Thread kann immer nur nacheinander Sachen machen. Deswegen gibt es ja in größeren Programmen mehrere Threads)

Ablauf:
User drückt Button
=>
EDT ruft actionPerformed auf
=>
in actionPerformed wird start() aufgerufen
=>
in start wird Thread.sleep aufgerufen
=> der EDT schläft. Das heist, die komplette GUI friert ein, da er sich nicht mehr um diese kümmern kann.


Deswegen musst du start() in einen neuen Thread aufrufen:
Java:
new Thread(new Runnable(){
   public void run(){
      start();
   }
});

Ergebnis:
Der EDT kann weiterarbeiten während der Extra-Thread schläft. Wenn der Extra-Thread aufwacht, die Hintergrundsfarbe des Panels wechselt, und dann wieder einschläft, kümmert sich der EDT um das darstellen der neuen Farbe auf dem Bildschirm.
 
Zuletzt bearbeitet:

StifMB

Mitglied
Danke, danke!! :-D Wie gesagt, kenne micht Threads (noch) nicht sonderlich gut aus. Habe aber bis eben nochmal einiges zum Thema Threads gelesen ... auch vom EDT, aber ist mir der Zusammenhang nicht gerade ins Auge gesprungen. ;-) Ich danke dir für deine gute Erklärung und deine wirklich schnelle Antwort. Habe es jetzt verstanden. Ach und das ganze funktioniert auch wie gewollt. :)

MFG Stif
 
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 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
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
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
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
R Swing JOptionPane Sprache Ändern AWT, Swing, JavaFX & SWT 4
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
K JButton Problem beim Schriftfarbe Ändern AWT, Swing, JavaFX & SWT 2
E Swing Verzögerung beim Hinzufügen / Ändern von Swingkomponenten AWT, Swing, JavaFX & SWT 3
L "Fremdes" JPanel von MouseEvent aus Ändern AWT, Swing, JavaFX & SWT 2
philipp Ändern des Inhalts eines Containers nicht möglich AWT, Swing, JavaFX & SWT 2
M Swing Ändern des Themes einer fremden Applikation AWT, Swing, JavaFX & SWT 8
A Schriftfarbe von jTabbedPane und Button Ändern AWT, Swing, JavaFX & SWT 7
A JTappedPane layout Ändern? AWT, Swing, JavaFX & SWT 7
P JList Index Ändern Problem AWT, Swing, JavaFX & SWT 4
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
P Bug in Java? - Problem beim Ändern von Spaltentiteln AWT, Swing, JavaFX & SWT 2
vogella JTable - Hinzufügen von Datensätzen und Ändern von Daten AWT, Swing, JavaFX & SWT 2
T Ändern des Default-Aussehens einer JComboBox AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben