启动时,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元素?
答案 0 :(得分:5)
启动时,JavaFX的AnimationTimer是否在单独的线程上运行?
不,它没有。它在JavaFX应用程序线程上运行。当AnimationTimer处于活动状态时,每个帧都会调用AnimationTimer的handle()
方法。通常,JavaFX会尝试保持 60 fps 的帧速率。
这是否意味着如果我在Application的start()中创建AnimationTimer,从Timer中修改UI元素是安全的吗?
是的,确实如此。由于它在JavaFX应用程序线程上运行,因此修改场景图元素是完全正确的。只要确保你没有在handle()
中进行繁重的计算。