这是我的数组
我创建了一个圆圈并将其添加到我的形状数组
ArrayList<Shape> Objects = new ArrayList<Shape>();
Circle I = ClassObjects.getCircle(randomWidth,randomX,randomY);
Objects.add(I);
我曾尝试使用
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(Timingobjects::myTask, 0, 1, TimeUnit.SECONDS);
}// program name, function, wait before start, time before each loop
private static void myTask() {
System.out.println("Running");
}
但我发现这是一个可运行的执行程序服务,因此不会传递任何返回值,我也无法传入数组。
我曾尝试查看可调用的执行程序服务,但我无法理解如何对其进行编码。
如果有人可以给我一个可执行文件的示例,每0.1秒运行一次,并且可以将我的形状数组列表传入其中,以便可以更改它然后返回。
我将非常感激。
答案 0 :(得分:1)
有关示例,请参阅Oracle Timeline教程中Animation and Visual Effects in JavaFX的使用。
否则您可以使用AnimationTimer。
您不需要将数组传递给时间轴或AnimationTimer,因为节点将存储在场景图中,您可以直接从时间轴或AnimationTimer事件处理代码中操作场景图节点。 / p>
例如,创建一个每0.1秒处理一次的时间轴:
final Timeline timeline = new Timeline();
timeline.setCycleCount(Animation.INDEFINITE);
timeline.getKeyFrames().add(
new KeyFrame(Duration.millis(100)),
new KeyValue(node.translateXProperty(), 25))
);
timeline.play();
请注意,默认情况下,JavaFX中的帧速率以每秒60帧的速度处理。因此.1秒的时间线不会被称为每秒.1秒。
也相关:
答案 1 :(得分:0)
可以使用Article.where('date < ?', Time.now)
。像TimerTask
那样延伸:
TimerTask
不要尝试返回任何值。使用观察者模式通知订阅者。
现在
class CustomTimerTask extends TimerTask {
List<Shape> shapes;
public CustomTimerTask(List<Shape> shapes, /* observers*/) {
this.shapes = shapes;
}
@Override
public void run() {
// update shapes
// notify( about mouse events or whatever)
}
}