java fx
Java的成功取决于以下事实:它是其问题域内的一种良好的通用语言。 对于编写长时间运行的现代企业计算中典型的服务器端代码,以及在其他情况下(如跨平台支持,稳定性和安全性是关键因素的移动开发),Java是一个不错的选择。 但是,有些编程任务得益于一定程度的专业化,而Java与其他通用语言一样,不太适合这些任务。 现代GUI设计就是一个例子,它带来了技术和管理上的双重挑战。
在管理方面,光滑,复杂的用户界面通常需要许多不同的角色-图形艺术家,信息架构师,动画师和程序员。 虽然有些人也许能填补所有这些,但这种人很少。 通常,过程中会涉及许多不同的人,设计人员和开发人员之间来回的资源流动可能会成为一个严重的问题。 在技术方面,现代UI设计通常需要高水平的技术知识。 像Swing这样的复杂工具包使开发人员面临着一组复杂的控件,他们需要学习创建UI时如何使用这些控件。 此外,接口的响应能力在很大程度上取决于并发性。 这本身不是问题-Java中的多线程编程非常简单-但是确实会导致大量样板代码来管理过渡和动画。
作为Adobe Flex和Microsoft Silverlight的竞争者,Sun的JavaFX进入了Rich Internet Application领域,是Sun为Java开发人员解决这些问题的策略之一。 JavaFX旨在提供一个新的基础平台,用于跨台式机,互联网和移动设备构建富Internet应用程序。 这也代表着Sun与Java产品市场互动的方式发生了重大变化,他们看到了它们建立了完整的解决方案,而不是仅仅关注基础技术。 当前的技术预览包括两个主要组件:Nile项目(专注于设计人员/开发人员的工作流程)和JavaFX Script(一种用于编写Java GUI应用程序的新的声明性语言)。
尽管Flex和Silverlight都使用XML作为其声明性语言(分别为MXML和XAML),但Sun已选择为该任务开发一种新的脚本语言JavaFX Script。 Sun的高级工程师Joshua Marinacci告诉我们,Sun目前没有计划添加XML方言:
“我们发现很多人真的讨厌使用XML,并希望为图形界面优化更紧凑的声明式语法。我们认为熟悉JavaScript的开发人员会发现JavaFX Script非常容易使用。”
JavaFX Script是一种声明性,静态类型的,已编译的领域特定语言(DSL),用于在Java Standard和Micro Edition之上创建用户界面,并且可以从JavaFX环境访问当前的Java包。 它针对两个不同的用户组:
- 已经熟悉Swing并且正在寻找一种以更快,更高效的方式构建功能丰富的接口的Java开发人员。
- 较熟悉其他脚本语言(例如JavaScript或ActionScript)的Web开发人员。
JavaFX Script具有强大的生产力功能,其中包括一些方便的谓词功能,用于插入和删除操作(例如,在x [1]之前插入10)。 其他常见问题也得到了巧妙解决:例如,将UI组件绑定到后端数据库很简单,并且该语言支持通过简化的类似于侦听器的机制(称为事件触发器)在变量的值更改时触发事件。
Sun高度重视该语言的可读性,以使其易于掌握和遵循其他开发人员的代码。 但是,这样做的结果是,他们使用了一组类似于BASIC的布尔运算符来代替Java和JavaScript中使用的C样式运算符。 因此,例如,JavaFX Script对&&使用'and',对||使用'or'。 尽管支持“!”,但它也支持“不”。 也已重新添加。 习惯它并不需要很长时间,但是鉴于目标受众,我的确感到惊讶。
该语言还有其他一些惊喜。 一种是,尽管它支持使用当前保留的单词创建变量或函数,但它要求您使用法语引号将其转义-例如var < > = 100-而不是从上下文解析中得出结果。 另一个是JavaFX Script选择支持多重继承来代替Java的接口方法。 根据Marinacci:
“我们发现,在GUI的上下文中,它使某些任务变得容易得多。但是,在大多数情况下,开发人员不必进行任何子类化,因此这不会成为问题。子类化主要用于组件开发人员。”
JavaFX彻底修改了Java本身熟悉的许多想法。 值得一提的是与Javadoc等效的JavaFXDoc,它对文档工具进行了一些急需的更新。 JavaFXDoc代替HTML生成了XML格式的文档,然后可以将其转换为辅助输出格式。 当前的格式是XHTML 1.0,但是此两步过程为将来提供了一定程度的证明,从而为支持其他格式(例如PDF)或建立知识库的数据库提供了可能性。 新的输出格式不使用框架,可以使用CSS轻松设置外观。 它还允许对单个配置文件进行一些基本过滤-例如,将JavaFX API分为通用配置文件,桌面配置文件和移动配置文件,并且可以根据需要过滤文档。 还有就是输出的例子在这里 。 JavaFXDoc也通过@examples标记支持内联示例,因此对生产力的关注也显而易见。 输出示例代码并自动生成语法突出显示,然后doc工具编译并执行示例,将屏幕快照放入生成的文档中,从而提供了一种自动方式来保持文档屏幕快照为最新。
我们与Marinacci讨论了该工具的未来计划,他确认Sun正在开发搜索解决方案,尽管版本1发行版并不希望这样做。 Java 7的临时列表中已更新了核心Javadoc工具,他确认从JavaFXDoc的工作中学到的许多经验教训将适用于Javadoc的未来版本。
JavaFX Script可以访问所有现有的Java包,但还包括新的API。 两个关键的是媒体API(当前作为本机库提供,将在版本1发行版中用跨平台的On2 TrueMotion视频编解码器进行补充)和场景图API。 场景图API代表了来自Swing背景的开发人员通常如何考虑GUI的某种转变。 在此,GUI表示为构成场景并响应用户交互的可视节点的层次结构。 场景图模型支持效果,任意变换(缩放和旋转)以及动画。 场景图保留图形对象,并在刷新发生时将其绘制在场景上,从而抽象出处理重绘,缓存的细节以及使用Java2D等即时模式API所熟悉的许多其他细节。 这种抽象级别还允许API执行各种自动优化,例如将纹理和基元预加载到图形卡。 场景图API与JavaFX紧密相关,但是您也可以在普通Java应用程序中使用它。
Sun将API分为三个配置文件,其中两个现在可用:通用配置文件适用于每个设备上所有可用的API,包括场景图API和媒体组件,而桌面配置文件代表更熟悉的Swing组件。 第三个是移动配置文件,预计将在2009年发布,并有望成为用于手机开发人员的完整应用程序堆栈,但公开的细节仍然不明确。
撰写本文时,通用API有一两个重要的遗漏–例如,JavaFX预览版中的Table,TabbedPane,TextArea和BookPanel组件没有等效项。 这个发行版本应该感觉更加完整和一致。 Marinacci告诉我们:
“我们计划将Swing组件移动到Node的子类中,因此您可以在不使用适配器类的情况下自由地将Swing组件与图形节点混合。目前,高级类(例如树和表)仅在桌面上可用。”
开发一种新语言而不是遵循Adobe的领导是一项大胆的决定,我认为这是一个很好的决定。 JavaFX Script通常非常令人愉快,并且具有超出其当前应用程序的多种用途-例如,JavaFX数据格式(FXD)是项目Nile的关键部分,它使用JavaFX Script声明性格式的子集来表示图形。资源。
借助Silverlight,Microsoft提供了自己的工具集(表达式套件),可以直接采用Adobe的Creative Suite产品。 Sun还在开发自己的工具(预计于明年),但已通过Project Nile选择首先关注从Adobe的Illustrator和Photoshop开始支持流行的现有工具。
Project Nile在OS X和Windows上均受支持,其中包括Adobe Illustrator和Photoshop CS3的插件,SVG转换器以及JavaFX数据格式(FXD)的查看器。 使用Adobe工具之一的设计人员可以按常规方式创建其图形资源,然后可以将文件导出到FXD。 查看器实用程序允许用户查看图形文件,以确认导出的文件看起来像预期的那样。 在JavaFX脚本语言中,开发人员能够访问和操纵组成单个图形资源文件的各个层。 这对于图形资源来说效果很好,但是仍然存在将自定义样式应用于基本组件的问题。 Sun在这里寻求CSS,而通过CSS来对Swing组件进行外观设置的功能针对JavaFX的版本1。
所有这些工作的基础都是Java 6 Update 10(以前是消费者JRE项目)–部署,性能,内存使用以及内置外观(Nimbus)的改进都有助于Swing作为桌面开发平台的有效性。 不幸的是,目前这对于开发人员来说是一个很大的限制因素。 尽管Sun已发布了适用于Linux和Solaris以及Windows的Update 10更新版本,但是在这些版本之间,Applet Quickstarter,内核安装程序和Direct3D Pipleine仅在Windows平台上存在重要的实现差异。 此外,Apple选择将任何形式的Java 6限制为在64位Intel Mac上使用OSX 10.5。 Marinacci确实告诉我们,Sun未与Apple合作改善OSX上的Java和JavaFX支持,但未提供任何细节。 他还为我们提供了最新的下载数据:
“我们平均每个月下载JRE的次数为40-50m,有些月份的峰值次数为1亿。其中有95%以上的下载是JavaSE6。JavaSE6 Update 10最终发布几个月后,它将自动打开。更新中心,我们也希望看到类似的数字。根据Omniture,我们还知道91%的互联网连接计算机都安装了Java。”
Flash和Silverlight都是完全封闭的源代码专有工具,仍然在某些开发人员商店中受到采用的重大障碍。 而且,鉴于Flash中的许多关键代码(例如其音频和视频编解码器)是从第三方获得许可的,因此Adobe很难像Sun用Java那样打开平台。 尽管许可证尚未最终确定,但Sun承诺将JavaFX作为开放源代码软件提供,并且到目前为止,它已根据GPL v.2许可证发布了编译器和场景图API。 当平台发布时,这可能会极大地促进其采用,但要成为强大的竞争者,它仍有大量工作要做。
java fx