14

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

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

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

我提出的问题是:您会将其中哪一个用于跨平台应用程序,您在做出决定时考虑了哪些标准?

感谢您抽出时间来阅读!:)

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

再次感谢!:)

4

5 回答 5

20

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

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 已经有一些很好的自定义工具/display/handle 小部件,我们根本无法在 JavaFX 中重现。

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

好吧,JavaFX 2.2 是由 Java 构成的,并且是为 Java 编写的。我个人发现用 Java 编程比 C++ 更好也更容易。在 Java 中您永远不必为指针而苦恼,您始终可以依靠垃圾收集器进行内存管理,网络上有大量教程和文档(我相信它们超过了 C++)以及不断增长的 Java 大师社区。

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

希望对你有帮助,加油

于 2012-09-27T01:14:18.653 回答
13

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

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

我认真研究了这些框架:

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) Adob​​e Air Pajamas

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

最初,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 框架的组合被证明非常强大的地方。
  • 尽管 Qt 模块是用 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

于 2012-09-28T07:21:55.923 回答
8

从时间戳中可以看出,4 个月前我报告说我选择 JavaFX2 而不是 QT 来进行原型研究项目。大约 2 个月前,我开始从 JavaFX2 切换到 QT,从那以后就再也没有回头。争论的焦点是从原型设计到生产的转变。在编写生产代码方面,QT 被证明远远领先于 JavaFX2。

与往常一样,魔鬼在细节中,而正是一堆小东西产生了很大的不同。使用 JavaFX2,我一直在面对和解决一些小问题,例如无法控制的拆分器窗格调整大小行为、有限的树控制和有限的 WebKit API 访问(例如,尝试实现浏览器缩放按钮,或将整个网页保存到本地 html 文件 - 可行但比应有的笨重 100 倍)。当加在一起时,这些“次要”的变通办法会使进展减慢到停止。

有了 QT,这样的障碍就少了很多,因此,从原型到产品的过渡是自然的、无缝的,而且速度要快几个数量级。

不利的一面是,使用 QT 进入“Hello World”需要更长的时间。但是,一旦到达那里,生产力就迅速超过并远远超过了 JavaFX2。原因之一是 QT 文档、示例程序和开发人员社区更加广泛。QT 从 1992 年开始出现,JavaFX2 从 2011 年开始出现,这种年龄差异在两个 GUI 框架的成熟度水平上产生了显着差异。

至于 Java 与 C++ 的问题,根本不是问题。两者都是很棒的语言。就个人而言,出于各种效率、生产力和性能原因,我发现 C++ 是卓越的 GUI 语言,但同样,这是个人结论。

于 2013-02-03T23:31:31.667 回答
2

我认为 Qt 最好和最有趣的部分是它的信号槽,特别是在处理线程时,它变得非常容易。

于 2019-02-28T09:54:54.700 回答
1

来自 .NET/C#,您还应该将Real Studio视为创建跨平台应用程序的一种方式。它当然可以满足您对尝试创建的内容的要求,并且比 JavaFX 或 Qt 简单得多。

于 2012-09-26T11:47:35.293 回答