用于跨平台应用程序的 JavaFX 2.0 和 Qt

2022-09-03 16:51:41

我需要处理跨平台应用程序(特别是带有GUI的程序)的开发人员提供一些建议。

我将很快创建一个需要跨平台的应用程序,所以我对两个不同的框架做了一些初步研究:JavaFX 2.0和Qt。

老实说,两者都非常适合我的需求。然后我问自己为什么我会选择一个而不是另一个(剧透警报:我不知道答案:P)。我知道JavaFX 2.0是相当新的(截至2012年),并且不完全支持跨平台,但它最终会得到支持。

我提出的问题是:你会在跨平台应用程序中使用哪一个,在做出决定时,你看的是什么标准?

感谢您抽出宝贵时间阅读本文!:)

编辑:在考虑这个问题时,供您参考,我将要编写的应用程序涉及读取/写入XML文件,显示图像以及创建一些具有自定义功能的小部件。我已经用.NET用C#编写了类似的应用程序,但是在考虑JavaFX 2.0或Qt的跨平台可用性时,我希望得到建议。

再次感谢!:)


答案 1

这是一个古老的问题:稳定性与前沿。我将尝试根据您的应用程序功能为您提供一些个人见解。

JavaFX 2.0是相当新的(截至2012年),并且不完全支持跨平台

好吧,它在Linux,Windows和Mac上完全受支持。我之所以这么说,是因为我正在Mac上开发一个JavaFX 2.2应用程序,服务器在Linux机器上运行,客户端在Windows盒子上运行。

读/写 XML 文件

我还没有看到一些工具/接口比sax2更好/更容易/更快来解析XML。当然,QtXMLPatterns模块解析器值得尊重,但他们甚至正在开发一个基于SAX2的XML解析器(顺便说一句,它不完整,与传统的SAX1方法不完全兼容),所以我会说添加JavaFX 2一些分数。

显示图像

这两种技术都可以足够轻松地显示图像,但JavaFX 2.2缺少一些用于图像处理的工具(特殊格式的编解码器)。如果图像处理是一个关键问题,我会说Qt在战斗中略微领先。

创建一些具有自定义功能的小部件。

到目前为止,这在JavaFX 2中并不是一件容易的事,因为Stage对象没有像ALWAYS_ON_TOP这样的选项,直到3.0(2013年的某个地方)才有,这并非不可能很难,但是Qt已经有一些很好的工具来自定义/显示/处理小部件,我们根本无法在JavaFX中重现。

您将使用其中哪一个用于跨平台应用程序,在做出该决定时,您考虑了哪些标准?

好吧,JavaFX 2.2是由Java和Java组成的。我个人发现用Java编程比C++更好,更容易。你永远不必在java中与指针斗争,你总是可以依靠垃圾回收器进行内存管理,网络上有很多教程和文档(我相信它们超过了C++),以及一个不断发展的Java Gurus社区。

抽象地说,我选择JavaFX 2.2是因为它很漂亮,因为它很酷,因为我可以更容易地处理MVC,而且我喜欢Java,但是我相信如果你的应用程序的小部件部分是它的主要目的,你应该选择Qt。

我希望它有帮助,干杯


答案 2

我目前正在研究适合开发离线html5创作应用程序的各种跨平台框架。除了跨平台操作(Windows,Linux,OS-X)之外,我的应用程序还具有以下主要要求:

嵌入式数据库 嵌入式(或,其次,主流浏览器)HTML5渲染引擎 高性能可编辑DND树,拆分器面板和富文本编辑器小部件 中型图像处理USB记忆棒便携性

我认真研究了这些框架:

jQuery (JavaScript), HTML5, CSS3 Google Web Toolkit [GWT] (Java to JavaScript) JavaFX 2.0 (Java) QT (C++ (Java binding available)) Xulrunner (XML, JavaScript) GTK+ (C) Adobe Air Pyjamas

我花了一大笔钱在所有这些技术的书籍上,我已经开始编写原型,看看每个框架能带我走多快、多远。

最初,JavaFX 2.0带我走得最快,差距很大。对此的简单解释是,使用JavaFX,所有工具,IDE,库,文档,代码示例,周转,调试,社区支持,制造商(Oracle)支持和学习曲线都以最少的阻抗不匹配结合在一起。

JavaFX最大的胜利可能是它易于实现客户端嵌入式数据库(Derby)。令人惊讶的是,对于所有其他框架,这项任务要困难得多,而且“笨拙”。

不幸的是,当我发现WebView小部件不能从本地 file:// URL执行JavaScript时,我遇到了一个严重的JavaFX绊脚石。QtWebKit,GTKWebKit,Safari和Opera(都基于WebKit)也表现出相同的 file:// JavaScript阻止行为(但是Chrome没有),所以我推测这是默认的WebKit安全措施。

当时,我认为 file:// JavaScript问题是JavaFX的障碍,所以我继续开发jQuery,GWT和Xulrunner原型。然而,结果,我的原型设计生产力急剧下降。与其他框架的弗兰肯斯坦和阻抗不匹配明显比JavaFX更糟糕。

如此之多,以至于在杂草丛中徘徊了好几个星期之后,我回到了我的JavaFX原型,非常有动力地寻找一个解决方案。我最终通过在原型中嵌入Java SE 6的Web服务器来解决这个问题,并通过使用以下格式的URL加载JavaFX WebEngine来连接到本地文件:“http://localhost:58357/xxxxx.html”以这种方式解锁JavaFX原型就像回家一样。这是一股真正的新鲜空气,更不用说大大的生产力提升器了。

基于这些经验,这里有一些见解可能会在JavaFX与Qt的辩论中有所帮助。

  • 我同意JavaFX与Qt的问题,因为这两个框架分别成为我最喜欢的#1和#2,最有成效的选择。
  • 也就是说,我会将jQuery / HTML5 / CSS3框架添加到组合中。这个框架是如此强大,并且充满了x平台
    应用程序开发的潜力,以至于我甚至说它是不可避免的。在我对小部件控件的广泛搜索中,可编辑的DND树,拆分器面板和富文本所见即所得编辑器小部件的主要候选者原来是开源jQuery插件。一旦你解决了本地 file:// 问题,jQuery/HTML5/CSS3与JavaFX WebView小部件很好地兼容。jQuery/HTML5/CSS3不足的一个领域是客户端数据库存储。这就是JavaFX和jQuery / HTML5 / CSS3框架的组合被证明是非常强大的。
  • 尽管它们是用C++编写的,但Qt模块具有Java和JavaScript语言包装器,这意味着开发人员不需要知道或使用C++来使用Qt。
  • 这就提出了一个观点,即它不一定是JavaFX与Qt,非此即彼的问题。事实上,一个更有建设性和更有价值的问题很可能是,“JavaFX和Qt?
  • 这就引出了另一个重要的观点:我很快发现我最好的跨平台应用程序开发框架实际上是JavaFX 2,直接Java SE,Swing(用于遗留自定义小部件),WebKit和jQuery / HTML5 / CSS3的混合体。在未来,GWT,相关的第三方GWT库和Qt模块可能会加入这个组合。这里的要点是,使用单一的,基因纯的框架的计划很快就消失了。
  • 目前,将整个混合框架绑定在一起的一个公共线程是普通的Java SE。因为 JavaFX 2 是在 Java SE 上构建的,所以我的投票是从 JavaFX 2 开始,然后根据需要添加 Swing、WebKit、jQuery/HTML5/CSS3、GWT 和 Qt。
  • 最后,这篇文章帮助说服我跳上JavaFX的马车。http://fxexperience.com/2012/04/interview-with-peter-zhelezniakov/

--H


推荐