我正在尝试制作一个有3个按钮的小程序,所有这些按钮都是白色的。按下第一个按钮(包含文字" Go!")将使第二个按钮变为橙色3秒钟,之后,它将再次变为白色并且第三个按钮将永久变为白色绿色。
但是,在我的下面的代码中,我遇到了一个问题:当按下按钮" Go!"时,它会使我的程序稍微冻结3秒钟,然后第三个按钮变为绿色。你能帮我吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Example extends JFrame
{
public Example(String title)
{
super(title);
GridLayout gl = new GridLayout(3,1);
setLayout(gl);
final JButton b1 = new JButton("Go!");
final JButton b2 = new JButton();
final JButton b3 = new JButton();
b1.setBackground(Color.WHITE);
b2.setBackground(Color.WHITE);
b3.setBackground(Color.WHITE);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
b2.setBackground(Color.ORANGE);
try
{
Thread.sleep(3000);
} catch (InterruptedException ie) {}
b2.setBackground(Color.WHITE);
b3.setBackground(Color.GREEN);
}
});
add(b1);
add(b2);
add(b3);
setSize(50,200);
setVisible(true);
}
public static void main(String[] args)
{
Example ex = new Example("My Example");
}
}
答案 0 :(得分:2)
Swing是单线程的。在Thread.sleep
中调用EDT
会阻止UI更新。请改用Swing Timer。
答案 1 :(得分:1)
您正在主线程上调用Thread.sleep(3000)
。因此,为什么你的程序冻结了三秒钟。正如@MarounMaroun建议的那样,你应该使用SwingWorker
。 Here是文档。