改变JLabel并等待一段时间退出

时间:2015-03-12 11:39:14

标签: java sleep

我想在单击按钮时更改标签,然后在3秒后退出程序。但是如果我点击按钮,标签就不会改变。它只在3秒后退出。这是我的逻辑

  1. 更改标签。

  2. 睡3秒

  3. 然后退出程序。

    btnNewButton_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Stopping the program.");
            state.setText("Bye...");
            state.setBackground(SystemColor.textHighlight);
            doStop();
        }
    });
    
    state = new JLabel("Not listening");
    state.setForeground(new Color(255, 255, 255));
    state.setBackground(new Color(204, 0, 51));
    state.setHorizontalAlignment(SwingConstants.CENTER);
    state.setBounds(10, 222, 488, 24);
    state.setOpaque(true);
    frame.getContentPane().add(state);
    

    public void doStop() { try{ Thread.sleep(3000); } catch(InterruptedException e){ } System.exit(0); }

3 个答案:

答案 0 :(得分:0)

在doStop()中使用javax.swing.TImer。喜欢这个

public void doStop() {
    Timer t=new Timer(3000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
             System.exit(0);
        }
    });
    t.start();
}

答案 1 :(得分:0)

使用javax.swing.Timer之类的:

final Timer time= new Timer(3000,new ActionListener()
{ 
    public void actionPerformed(ActionEvent e) 
    {   
        System.exit(0);
    }
}); 

删除doStop方法,将此代码包括在内。您的按钮actionListener就像这样

 System.out.println("Stopping the program.");
 state.setText("Bye...");
 state.setBackground(SystemColor.textHighlight);
 time.start();

Doc:

  

按指定的时间间隔触发一个或多个ActionEvent。一个示例用途   是一个动画对象,它使用Timer作为绘图的触发器   它的框架。

了解MORE

答案 2 :(得分:-1)

我猜问题是thread.sleep,尝试使用计时器代替。 有一个例子:

public void doStop() {
long savedTime=System.currentTimeMillis(), actualTime=System.currentTimeMillis();

while((savedTime+3000 > actualTime) ){
    actualTime=System.currentTimeMillis()
}
System.exit(0);}