Java,如何在JavaFX中暂停
我有4个按钮,我想让它们闪烁。我需要暂停一下。我如何在每次迭代后暂停500毫秒?有没有可能不用线程Java,如何在JavaFX中暂停,java,button,javafx,sleep,pause,Java,Button,Javafx,Sleep,Pause,我有4个按钮,我想让它们闪烁。我需要暂停一下。我如何在每次迭代后暂停500毫秒?有没有可能不用线程 使用经典的thread.sleep500调用,可以不使用thread 但您的整个UI线程将处于休眠状态,这意味着您的UI上的其他控件在这500毫秒内将无法工作 编辑 正如下面所说的,问题在于Timeline.play是异步的。如果不想使用其他线程,请创建同步代码 public void blink() { Button[] btn = new Button[]{btn1, btn2, bt
使用经典的thread.sleep500调用,可以不使用thread 但您的整个UI线程将处于休眠状态,这意味着您的UI上的其他控件在这500毫秒内将无法工作 编辑 正如下面所说的,问题在于Timeline.play是异步的。如果不想使用其他线程,请创建同步代码
public void blink() {
Button[] btn = new Button[]{btn1, btn2, btn3, btn4};
Random rn = new Random();
for (int i = 0; i < 100; i++) {
int d = rn.nextInt(4) + 1;
btn[d - 1].setOpacity(.1);
Thread.sleep(500);
btn[d - 1].setOpacity(1);
Thread.sleep(500);
}
}
但这是一个很大的时间线。您可以使用时间线的循环和自动反转功能:
Timeline t = new Timeline(
new KeyFrame(Duration.seconds(0), new KeyValue(btn[d - 1].opacityProperty(), .1)),
new KeyFrame(Duration.seconds(0.5), new KeyValue(btn[d - 1].opacityProperty(), 1))
);
t.setAutoReverse(true);
t.setCycleCount(Timeline.INDEFINITE);
t.play();
为什么要避免线程?请检查我的编辑@batmann,问题是当UI线程休眠时,我看不到闪烁。所以我应该为这个任务使用另一个线程?没有时间线,因为这是一个异步操作,在播放后立即返回。我将编辑我的答案,以获得没有时间表的建议。
public void blink() {
Button[] btn = new Button[]{btn1, btn2, btn3, btn4};
Random rn = new Random();
Timeline myTimeline = new Timeline();
double millis = 0.0;
for (int i = 0; i < 100; i++) {
int d = rn.nextInt(4) + 1;
myTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(millis), new KeyValue(btn[d - 1].opacityProperty(), .1)));
millis += 0.5;
myTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(millis), new KeyValue(btn[d - 1].opacityProperty(), 1)));
millis += 0.5;
}
myTimeline.play();
}
Timeline t = new Timeline(
new KeyFrame(Duration.seconds(0), new KeyValue(btn[d - 1].opacityProperty(), .1)),
new KeyFrame(Duration.seconds(0.5), new KeyValue(btn[d - 1].opacityProperty(), 1))
);
t.setAutoReverse(true);
t.setCycleCount(Timeline.INDEFINITE);
t.play();