【发布时间】:2020-12-09 10:17:53
【问题描述】:
我正在处理一段代码,我准备了一个简单的例子:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Example extends JFrame implements ActionListener {
public static void main(String[] args) {
Example e = new Example();
e.setVisible(true);
}
private JButton button;
public Example() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLayout(null);
button = new JButton("button");
button.setBounds(200, 150, 200, 50);
button.addActionListener(this);
this.add(button);
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
button.setEnabled(false);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
重点是,我们有actionPerformed 函数,它有两个动作:禁用按钮并运行sleep 来模仿我所做的一些工作。
我的问题是按钮在actionPerformed 结束后被禁用,换句话说,在这 5 秒的睡眠之后,我不能更早地禁用它。我试图用它做点什么,但到目前为止将button.setEnabled(false); 更改为button.setEnabled(false); this.repaint(); this.validate(); 什么也没做。
我的问题是:如何在工作中完成工作,我需要先禁用按钮,然后做一些耗时的事情(例如睡觉)并在工作完成后启用按钮?
【问题讨论】:
-
我很好奇。您在发布问题之前尝试过searching 吗?从 Swing 代码调用
Thread.sleep()已经被询问(并回答)了好几次了。 This question 看起来和你的很相似。你同意吗?
标签: java multithreading swing jbutton actionlistener