所以我想要做的是,当我按下按钮时,JTextField 文本开始每 3 秒更新一次新值。我已经尝试过线程睡眠方法,但它会在睡眠时间冻结整个程序,并且在它结束后文本字段会获取最新的输入。所以这里是我想要做的更好解释的例子。
只要有可用值,我就会每 3 秒按下 JButton 将数字放入 JTextFiel 中。我不希望它附加新文本,只需用新文本替换旧文本。有人知道我该怎么做吗?提前致谢。
所以我想要做的是,当我按下按钮时,JTextField 文本开始每 3 秒更新一次新值。我已经尝试过线程睡眠方法,但它会在睡眠时间冻结整个程序,并且在它结束后文本字段会获取最新的输入。所以这里是我想要做的更好解释的例子。
只要有可用值,我就会每 3 秒按下 JButton 将数字放入 JTextFiel 中。我不希望它附加新文本,只需用新文本替换旧文本。有人知道我该怎么做吗?提前致谢。
您应该使用javax.swing.Timer
.
final Timer updater = new Timer(3000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// update JTextField
}
});
JButton button = new JButton("Click me!");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updater.start();
}
});
Timer
不会阻塞事件调度线程(就像那样),因此Thread.sleep
它不会导致您的程序变得无响应。
你不能在 EDT 睡觉。您可以使用 swingworker(更好的解决方案)或执行以下操作:
//sleep in new thread
new Thread (new Runnable() {
public void run() {
Thread.sleep(3000);
//update UI in EDT
SwingUtilities.invokelater(new Runnable() {
public void run() {updateYourTextHere();}
});
}
}).start();
您需要在单独的线程上完成“工作”。在这里查看一些答案:Java GUI Not changed