线程任何时候,整个JavaFX系统都运行于两个以上的线程: JavaFX应用程序线程(JavaFX Application Thread):这是JavaFX应用开发人员所要使用的主要线程。任何“活着的”场景(指场景是窗口的一部分)都只能从这个线程访问。然而,场景也可以从后台线程创建,这使得开发人员可以从后台线程创建复杂的场景而同时保证“活着的”场景中的动画平滑而快速地播放。JavaFX应用程序线程与Swing或AWT得事件派发线程(EDT)不同,所以当把JavaFX代码嵌入Swing应用中时,必须格外当心。 Prism渲染线程(Prism Render Thread):这个线程只处理渲染工作,而不干预事件派发线程。它允许第N帧播放时的同时,N+1帧正在被处理。这种能力对于提高并发处理能力有着极大地好处,尤其是在现代的多处理器系统中尤为出色。Prism渲染线程也可以开启多个光栅线程去帮助分担渲染工作。 媒体线程(Media Thread):这个线程运行于后台并通过JavaFX应用程序线程所使用的场景来同步最新的帧。 脉搏(Pulse)脉搏(Pulse,先这么翻译吧,等官方翻译出来再修改,其本质就是Repaint信号)是JavaFX应使用Prism去同步场景和场景中的元素状态的标志。脉搏的最大速度为60帧/秒(FPS),而且无论何时只要场景中的动画进行,那么就会发送脉搏通知。即使动画没有进行,当场景发生改变,也会发送脉搏通知。例如,当一个按钮的位置发生了变化,那么就会安排一个脉搏通知。 当发送脉搏信号后,场景中的元素的状态就会根据渲染层进行同步。脉搏可以使应用程序开发者对于事件进行异步处理。这个重要的特点使得系统可以在一个脉搏来临前将事件进行批量处理。 布局管理和CSS也关联于脉搏信号。场景的众多变化可能导致多次布局或CSS的更新,这种更新会导致性能的降低。JavaFX系统会自动地在每次脉搏信号来临时将CSS或布局进行发送,从而避免系统性能下降。应用程序开发人员也可以手动触发布局或CSS变更通知的发送。 Glass窗口工具负责使用高性能的系统原生计时器来发送脉搏信号。 媒体与图像JavaFX媒体功能是通过javafx.scene.media API实现的。JavaFX提供显示和音频媒体功能。支持MP3,AIFF,WAV音频文件和FLV视频文件。JavaFX媒体功能由三个组件提供:媒体对象代表着媒体文件,媒体播放器用来播放媒体文件,媒体视图是代表着媒体的节点。 在图1中绿色的部分是媒体引擎组件,这部分已经在JavaFX 2.0中被完全重新设计了,增加了性能和稳定性,并提供了跨平台一致性。你可以阅读Incorporating Media Assets into JavaFX Applications文档来获取更多的信息。 嵌入式浏览器JavaFX嵌入式浏览器是JavaFX新的UI组件,它通过API提供了Web显示和访问的全部功能。图1中橙色的部分是基于WebKit的Web引擎组件(WebKit是一款支持HTML5、CSS、Javascript、Dom和SVG的开源Web浏览器引擎)。它使开发人员可以在他们的Java应用中实现以下功能: 渲染本地或远程的HTML内容 支持历史功能,并提供前进和后退导航 重新载入内容 向Web组件增加效果 编辑HTML内容 执行JavaScript命令 处理事件 这个嵌入式浏览器组件包括一下的类: WebEngine 提供基本的Web页访问功能 WebView 封装了一个WebEngine对象,可将HTML内容放入应用程序场景中,并提供域和方法来应用效果和变换。它是Node类的子类。 你可以阅读Adding HTML Content to JavaFX Applications文档来获取更多的关于JavaFX嵌入式浏览器的细节。 CSS在JavaFX中CSS提供了对于JavaFX中UI应用定制样式而无需改变代码的能力。CSS可以被异步地应用于任何JavaFX场景中的节点。JavaFX CSS样式也可以在运行期间被简单地赋予场景,并允许动态修改应用程序外观。 图2显示了同一应用程序在两个不同CSS样式下的效果: 图2 CSS样式范例 JavaFX CSS基于W3C CSS ver2.1版本规范与现在正在使用的ver3版本的一部分。JavaFX CSS可以使用任何CSS解析器,甚至那些不支持JavaFX扩展的部分的。这样可以将为JavaFX和为其他目的(如HTML页)所写的CSS混合为一个文件。由于JavaFX具有轻微不同的词法,所有的JavaFX属性名都以“-fx-”开头,包括那些可兼容于标准HTML的CSS。 你可以阅读 Skinning JavaFX Applications with CSS文章来获取更多的信息。 |