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

Change JLabel and wait for sometime to exit

我想在点击按钮的时候改变标签,然后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); }

在您的 doStop() 中使用 [=13a=]。像这样

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

我猜问题出在 thread.sleep,尝试改用计时器。 有一个例子:

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

while((savedTime+3000 > actualTime) ){
    actualTime=System.currentTimeMillis()
}
System.exit(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();

文档:

Fires one or more ActionEvents at specified intervals. An example use is an animation object that uses a Timer as the trigger for drawing its frames.

学习MORE