是否有可能在java中连续自动执行事件?



例如,我想要一个JTextfield用开始、停止和恢复按钮连续显示不同的随机数。当开始按钮被按下时,自动更新JTextField的可能解决方案是什么?我尝试在开始按钮的动作监听器内使用while循环,但它只是使按钮卡在while循环中。这是我尝试过的部分代码。

startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
while(true){
textField.setText(String.valueOf(random.nextInt()));
}
}
});

Read Concurrency in Swing.

您可以使用javax.swing.Timer来更改JTextField的文本。

一个小例子:

public class TimerExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(()->{
JTextField field = new JTextField(10);
Timer timer = new Timer(100, e->{
field.setText(String.valueOf(Math.random()));
});
timer.start();
JOptionPane.showMessageDialog(null,field);
});
}
}

如果你在运行UI的线程中使用while(true)(这个线程被称为EDT -事件调度线程),线程将无法处理事件,因为它被困在while循环中。