我在JavaFX GUI中有一个图形,我想要动画。
您可能知道,您无法在主线程之外更改JavaFX GUI,因此要模仿动画,您必须创建一个工作线程,然后将Runnables提供给主线程。
现在,我的目标是同时异步地为图形的不同部分制作动画,同时能够一次更改多少部分,以及延迟。我在屏幕上添加了滑块。
我通过创建一个'ThreadSpawner'解决了这个问题,而'ThreadSpawner'又创建了n个线程(在完成任务一次之后就死了)。
Task<Void> spawner = new Task<Void>() {
@Override
public Void call() throws InterruptedException {
while () {
for (int n = 0; n < amount; n++) {
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
}
Thread.sleep(delay);
}
return null;
}
};
Thread th = new Thread(spawner);
th.setDaemon(true);
th.start();
但是,我不喜欢它的外观,表现也不太好。
我也研究了ScheduledExecutorService和scheduleWithFixedDelay,但那些人不喜欢改变线程数量或动态延迟的想法。
什么会更快?什么会更好?还有其他我没想过的方法吗? 对于这样一个“基本”任务,我的解决方案似乎太复杂了。
答案 0 :(得分:0)
因此,为了更改线程数,ScheduledThreadPoolExecutor有一个名为setCorePoolSize的方法,它允许您更改线程数。 (注意:这不在界面中!)
至于更改频率,最好的办法是在从第一个调度程序收到的未来上调用cancel
,然后再次使用新频率添加。