详解JavaFX架构与框架

发表于:2011-10-13 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Jeky    来源:51Testing软件测试网采编

  图形系统

  在图1中用蓝色的部分是JavaFX图形系统。它是JavaFX场景层的下层细节实现。它为2D和3D的场景提供支持。当系统的图形硬件设备无法支持硬件渲染的时候,它提供软件渲染支持。

  在JavaFX平台上实现了两个图形加速管道:

  Prism:Prism处理渲染工作。他的渲染工作,包括3D渲染,都可以运行在硬件和软件渲染单元之上。它负责处理光栅和渲染JavaFX场景。基于所使用的设备的不同,可能有以下的渲染途径:

  ◆ 在Windows XP和Vista下使用DirectX 9

  ◆ 在Windows 7下使用DirectX 11

  ◆ 在Mac,Linux,嵌入式系统上使用OpenGL

  ◆ 如果硬件加速不可用,使用Java2D

  如果可用时,所有的硬件加速途径都将被使用。但如果不可用,Java2D渲染途径将被使用。这是由于该渲染技术已经包含在JRE中。这可能在进行3D场景处理时很重要,但是一旦硬件渲染途径可用,性能就会比较好。

  l Quantum Toolkit:Quantum Toolkit将Prism和Glass窗口工具结合在一起并使在整个JavaFX层次结构中上层组件可用。它也同时管理着与事件处理相对的渲染线程规则。

  Glass窗口工具

  在图1中间所示的Glass窗口工具是JavaFX 2.0图形栈中最底层的框架。他的主要责任是提供本地系统服务,比如说控制窗口,计时器或外观。它作为平台依赖层衔接着JavaFX平台和操作系统。

  Glass工具包也为事件队列提供管理功能。不同于AWT管理其自身所具有的事件队列,Glass工具包使用操作系统事件队列去管理线程。同样不同于AWT的是,Glass工具包与JavaFX应用运行于同一线程。而在AWT中,原生AWT运行于一个线程而Java层次运行于另一个线程。这样会带来许多问题,而JavaFX使用单一JavaFX线程来解决这类问题。

  线程

  任何时候,整个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窗口工具负责使用高性能的系统原生计时器来发送脉搏信号。

52/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号