AnimationTimer是否在自己的线程中运行?

时间:2015-10-11 16:16:08

标签: javafx

启动时,JavaFX的AnimationTimer是否在单独的线程上运行?

我在调试器中运行了一个JavaFX应用程序,有和没有AnimationTimer,并且在两种情况下都运行了6个线程。另外,JavaDocs没有提到它实现Runnable

这表明它不是在自己的线程中运行,但就其本质而言,我认为它需要在自己的线程中运行,以确保它以足够的时间运行。< / p>

如果它不是在自己的线程中运行,它是否只是在任何线程中创建它?这是否意味着如果我在AnimationTimer Application start()内创建import time, resource, os import requests from awsauth import S3Auth with open(os.path.expanduser("~/.boto")) as f: lines = f.read().splitlines() ACCESS_KEY = lines[1].split(' = ')[1] SECRET_KEY = lines[2].split(' = ')[1] for i in range(20): print resource.getrusage(resource.RUSAGE_SELF).ru_maxrss url = 'http://{}.s3.amazonaws.com/{}'.format( 'jca-screenshots-' + ('thumbs' if i % 2 == 0 else 'normal'), 'test.png') with open('test.png', 'rb') as f: resp = requests.put(url, data=f, auth=S3Auth(ACCESS_KEY, SECRET_KEY)) print 'resp:', resp time.sleep(5) ,则可以安全地从定时器中修改UI元素?

1 个答案:

答案 0 :(得分:5)

  

启动时,JavaFX的AnimationTimer是否在单独的线程上运行?

不,它没有。它在JavaFX应用程序线程上运行。当AnimationTimer处于活动状态时,每个帧都会调用AnimationTimer的handle()方法。通常,JavaFX会尝试保持 60 fps 的帧速率。

  

这是否意味着如果我在Application的start()中创建AnimationTimer,从Timer中修改UI元素是安全的吗?

是的,确实如此。由于它在JavaFX应用程序线程上运行,因此修改场景图元素是完全正确的。只要确保你没有在handle()中进行繁重的计算。