2016-07-30 6 views
-1

Ich habe 3 JLabel s, ich möchte eins nach dem anderen nach 1sec (1000mls) anzeigen. Thread.sleep(1000); wird nicht funktionieren. Ich weiß nicht, die drei JLabels werden nach Abschluss der Aufgabe angezeigt (3 JLabels werden gleichzeitig nach 3 Sekunden angezeigt). Wie kann ich es lösen? Kann der Timer eine Verzögerung verursachen?Verzögerung in Java machen

+1

Thread.sleep funktioniert gut, Sie können es einfach nicht in der GUI-Ereignisschleife verwenden, es sei denn, Sie möchten die GUI sperren. –

+0

Werfen Sie einen Blick auf diese http://StackOverflow.com/q/33105688/3111870 –

+0

Verwenden Sie einfach Swing-Timer, wenn Sie etwas raffiniert wie ein Videospiel tun. – user3437460

Antwort

1

Sie können diese versuchen

int delay = 1000; //milliseconds 
    ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      //...Perform a task... 
     } 
    }; 
    new Timer(delay, taskPerformer).start(); 

Sie lesen können mehr here

1

Hier ist meine Meinung dazu:

package demo.javase.swing; 

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class ThreeJLabelsDemo extends JPanel { 

    private Timer timer; 

    private JButton startButton; 

    private int count; 

    public ThreeJLabelsDemo() { 
     super(new FlowLayout()); 

     startButton = new JButton("Add 3 JLabels"); 
     startButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       startButton.setEnabled(false); 
       timer.start(); 
      } 

     }); 
     add(startButton); 

     timer = new Timer(1000, new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       add(new JLabel("Label" + count++)); 
       revalidate(); 
       repaint(); 
       timer.stop(); 
       if (count < 3) { 
        timer.restart(); 
       } else { 
        startButton.setEnabled(true); 
        count = 0; 
       } 
      } 

     }); 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("Three JLabels Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(new ThreeJLabelsDemo()); 
     frame.setSize(new Dimension(640, 480)); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 

     }); 
    } 

} 

ich in solchen Fällen glauben, Sie javax.swing.Timer als Thread.sleep(long) verwenden müssen wird die App einfach blockieren.