Frage zur Methode Thread.sleep()

Mane123

Bekanntes Mitglied
Hallo zusammen,

ich habe folgendes Problem:

ich möchte folgendes Programm erstellen:

Sobald eine Schalfläche betätigt wurde, werden auf einzelnen Karten die Vorderseite angezeigt.
Anschließend soll eine Pause von 5 Sek. sein und danach soll wieder die Rückseite angezeigt werden.

Ich hätte dies wie folgt gelöst:

Java:
		class ButtonListener implements ActionListener {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				
				if (e.getActionCommand().equals("schummeln")) {
						for(int i = 0; i < 42; i++) {
							karten[i].vorderseiteZeigen();
						}		
						
						try {			
						Thread.sleep(5000);
						}
						
						catch (InterruptedException arg0) {
							arg0.printStackTrace();
						}
						
						for(int i = 0; i < 42; i++) {
							karten[i].rueckseiteZeigen();
						}
				}
				
			}
		}

Allerdings sind nun zuerst 5 Sek. Pause, dann wird die Vorderseite und sofort danach die Rückseite angezeigt.

Wie muss ich das umstellen, damit es wie gewünscht funktioniert?

Viele Grüße
 
Die Klassen, die hier verwendet wurden, kenn ich nicht, also kann ichs nicht testen.
Aber das hier funktioniert nicht:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test
{
  public static void main(String[] args)
  {
    JFrame testFrame = new JFrame();
    JButton b = new JButton("Click me");
    final JLabel color = new JLabel(" ");
    color.setOpaque(true);
    color.setBackground(Color.BLUE);
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e)
      {
        color.setBackground(Color.RED);
        try {
          Thread.sleep(1500);
        } catch(Exception ex){}
        color.setBackground(Color.GREEN);
      }
    });
    testFrame.add(b, BorderLayout.CENTER);
    testFrame.add(color, BorderLayout.SOUTH);
    testFrame.pack();
    testFrame.setLocationRelativeTo(null);
    testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    testFrame.setVisible(true);
  }
}

Ändere ich Zeilen 18-21, dann funktionierts:
[Java=18] Timer t = new Timer(1500, new ActionListener() {
public void actionPerformed(ActionEvent e) { color.setBackground(Color.GREEN); }});
t.setRepeats(false);
t.start();[/code]
 
Vielen Dank für die Hinweise!

Ich habe es ein bisschen länger gelöst:

Java:
	class TimerListenerSchummel implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			
			for(int i = 0; i < 42; i++) {
				karten[i].schummelRueckseiteZeigen();
			}
		}	
	}	
		//////////////////////////111 ein Listener für die Schaltfläche
		class ButtonListener implements ActionListener {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				
				if (e.getActionCommand().equals("schummeln")) {
						for(int i = 0; i < 42; i++) {
							karten[i].schummelVorderseiteZeigen();
						}		
				timerSchummel = new Timer(3000, new TimerListenerSchummel());
				timerSchummel.setRepeats(false);
				timerSchummel.start();
				}
			}
		}
Legt ihr den Listener dann nicht in einer eigenen Klasse an?
Bis jetzt habe ich das nur so gelernt.

Viele Grüße
 

Neue Themen


Zurück
Oben