在java中制造延迟

在java中制造延迟,java,swing,Java,Swing,我有3个JLabels,我想在1秒(1000ml)后逐个显示线程睡眠(1000)将不起作用。我不知道,三个JLabel将在完成任务后显示(三个JLabel在3秒后同时显示)。我怎样才能解决它?计时器可以延迟吗?你可以试试这个 int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent

我有3个
JLabel
s,我想在1秒(1000ml)后逐个显示<代码>线程睡眠(1000)将不起作用。我不知道,三个JLabel将在完成任务后显示(三个JLabel在3秒后同时显示)。我怎样才能解决它?计时器可以延迟吗?

你可以试试这个

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

您可以阅读更多内容,以下是我的看法:

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();
            }

        });
    }

}
包demo.javase.swing;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类3jLabelsDemo扩展了JPanel{
私人定时器;
私有JButton开始按钮;
私人整数计数;
public三个jlabelsdemo(){
超级(新FlowLayout());
startButton=新的JButton(“添加3个JLabel”);
addActionListener(新ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
startButton.setEnabled(错误);
timer.start();
}
});
添加(开始按钮);
计时器=新计时器(1000,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
添加(新JLabel(“标签”+计数+);
重新验证();
重新油漆();
timer.stop();
如果(计数<3){
timer.restart();
}否则{
startButton.setEnabled(真);
计数=0;
}
}
});
}
私有静态void createAndShowGUI(){
JFrame=newjframe(“三个jlabel演示”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(新的三个jLabelsDemo());
框架设置尺寸(新尺寸(640480));
frame.setVisible(true);
}
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
createAndShowGUI();
}
});
}
}

我相信在这种情况下,你必须使用
javax.swing.Timer
作为
Thread.sleep(long)
将简单地阻止应用程序。

Thread.sleep工作正常,除非你想让GUI锁定,否则你不能在GUI事件循环中使用它。看看这个,除非你正在做像视频游戏这样复杂的事情,否则就使用swing Timer。