button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
while(true) {
s += 10;
if((s>height/1.2) || (s == height/1.2)) {
s = 0;
}
label.setLayoutX(s);
}}});
如何在不停止主GUI线程的情况下停止循环?(线程。睡眠(1000)未工作)
您可以使用JavaFX
Timeline
。从这里修改代码。
下面的应用程序演示了一种使用Timeline
的方法。
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author Sedrick
*/
public class JavaFXApplication25 extends Application {
Integer s = 0;
@Override
public void start(Stage primaryStage) {
Label label = new Label(s.toString());
//This Timeline is set to run every second. It will increase s by 10 and set s value to the label.
Timeline oneSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), (ActionEvent event1) -> {
s += 10;
label.setText(s.toString());
}));
oneSecondsWonder.setCycleCount(Timeline.INDEFINITE);//Set to run Timeline forever or as long as the app is running.
//Button used to pause and play the Timeline
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
switch(oneSecondsWonder.getStatus())
{
case RUNNING:
oneSecondsWonder.pause();
break;
case PAUSED:
oneSecondsWonder.play();
break;
case STOPPED:
oneSecondsWonder.play();
break;
}
});
VBox root = new VBox(btn, label);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
我在试着理解为什么一些简单的环路会以这样的速度运行 第一种情况: 根据IACA,吞吐量是1个周期,瓶颈是端口1,05。我不明白为什么它是1 cylce。毕竟我们有两个循环承载的依赖关系: 而且这种Latency是循环进行的,所以它应该会减慢我们的迭代。 第二种情况: 我更不明白为什么吞吐量是1.65。
问题内容: 我使用以下代码为基于RotatedTranstion的ImageView创建了动画: 这将产生以下动画: 轮换行动 就像您在动画gif中注意到的那样,动画不是连续的,即在动画周期之间存在很小的延迟(暂停)。 我试图看一下API,但无法弄清楚是什么原因造成了这种延迟以及如何摆脱这种延迟。 问题答案: 每个周期之间的明显停顿是由内插器引起的,默认情况下会使用该插值器(因此它在每个周期的末尾
问题内容: 我想在循环内添加延迟/睡眠: 我这样尝试过: 只有第一种情况是正确的:显示后,它将等待3秒钟,然后显示,但随后将不断重复。 我想要的是在显示3秒之后显示出来,然后它需要第二次等待3秒,依此类推。 问题答案: 该函数是非阻塞的,将立即返回。因此,您的循环将非常快速地迭代,并且将快速连续地发起3秒超时触发。这就是为什么您的第一个警报会在3秒钟后弹出,而其余所有警报都将连续不断地出现。 您可
问题内容: 最终它将在jLabel上显示最终编号,但不会递增更新编号。任何帮助 问题答案: Swing是单线程的 。因此, 长时间运行的任务绝不应在EDT中进行 。这包括睡觉。而是使用。这将在后台线程中延迟,然后发布要在EDT中执行的操作。 也可以看看: 如何使用摇摆计时器 该SSCCE模仿一个计数器,该计数器从每秒开始计数(即更新实例),直到应用程序终止。
问题内容: 因此,当我运行此代码时,我的JFrame变得无响应。我设法将其追溯到gameLoop()下的while循环。无论使用其中调用Thread.sleep()的delay(1000 / FRAMERATE),它都不允许键或鼠标侦听器执行其工作。 下面的完整代码,gameLoop()中存在问题 如果很重要,程序将从此处开始,然后转到Game类 可能无关紧要,但这是github存储库的插件htt
问题内容: 我在玩JavaFX的。我个人认为,将鼠标悬停在某物和实际显示的工具提示之间的延迟太长了。在API中的外观显示: 通常,当鼠标移至控件上方时,工具提示将被“激活”。在工具提示被“激活”到实际显示之间通常会有一些延迟。细节(例如延迟量等)留给Skin实现。 经过进一步的调查,我找不到控制延迟的任何可能性。在JavaFX的CSS参考没有关于延迟时间和运行时间,评价信息没有帮助。 我知道,有一