将现有的网络应用程序转换为桌面应用程序

4

我在这个话题上看到了一些类似的问题,但它们并不是很有帮助,所以我提出这个问题。

将一个相当大小、简单的 Web 应用程序快速转换为针对 PC 和 Mac 的基于 Java 桌面客户端的最快方法是什么?不幸的是,由于各种原因,我不能在这里分享关于应用程序的太多细节。不过,应用程序中最复杂的用户界面是包含多级线程讨论的页面(请参见 此处 以获得我所说的内容的说明性示例)。当前的 Web 应用程序是基于 Python 的,因此我无法重用服务器端代码中的任何内容(我认为这不是问题)

我从未做过任何 Swing、AWT 或其他基于 Java 的厚客户端 GUI 工作。我的思路或多或少地受到基于 Web 的应用程序的定义。我能够使用 Java 或 Python 进行端到端 Web 应用程序开发(包括后端和使用 HTML、CSS 和 JS 的良好 UI)。对于你的答案,请只关注 Java 解决方案。

以下是我的问题: 我应该使用哪个最好的框架或工具?在我的研究中,我发现了以下一些工具。
1. Awt - 看起来不是一个好的选择。 2. Swing - 我相信这可能是我最好的选择,它似乎与常规Java SDK/JRE捆绑在一起。 3. SWT - 它似乎以某种方式补充了Swing。 4. 基于这里的一篇文章的Griffon。这个框架使用Groovy(顺便说一下,我对Groovy一无所知),Adobe Air flex。有任何开源框架吗?
还有一些其他问题需要我注意吗?其中一些问题我希望听听您的意见。
  1. 客户端部署会使事情变得复杂,这是真的吗?由于我们使用Java,我认为这不是问题。我知道基于Web的应用程序和桌面应用程序之间通常存在权衡(例如,部署和升级的便利性等等)。
  2. 创建一键安装程序并捆绑应用程序和所需环境(例如JRE等)有多容易?
  3. 产品需要在Mac和Windows上工作。这是否会在任何方面使事情变得复杂(同样,由于它是Java,我假设没有什么陷阱,但如果有任何问题,我希望得到预警)。
  4. 哪种框架或技术可以作为技能集在简历上很好地展示?

我的最后期限是最多2个月-对于一个相当简单的Web应用程序来说,这足够了吗,考虑到我需要学习所有这些技术?我只是想在这里有个概念-我知道准确的答案可能不可能给出-只是假设我足够聪明,可以快速掌握任何不熟悉的技术堆栈。

谢谢!


嗨,安德鲁,抱歉那是个打字错误 - 我的意思是“Mac和Windows”。我已经更正了这个错误。感谢你的第二条评论。目前我倾向于使用Swing。 - serverman
3个回答

5

GUI工具包

考虑到“Mac和Windows”,我建议使用“Swing”(也许还有SwingX1)。

  1. 我同意你对AWT的评估。它不支持任何组件中的格式化文本。它还缺少树、表格(和其他组件)以及最近有使用经验的人。但请注意,它与Swing一样“捆绑在常规Java SDK/JRE中”,只是通常比Swing更老且功能较弱。
  2. 如果想要补充Swing,可以使用SwingX。SwingX是基于Swing构建的,提供了高级控件,在J2SE中无法“开箱即用”。
  3. Swing和SWT是相互不兼容的 - 只能使用其中之一。
  4. 我没有使用过Griffon。

Swing是上述选项中使用最广泛的,因此对于获取帮助(忽略决策中其他可能重要的因素),它是一个很好的选择。

注1)如果它们有任何能够轻松呈现线程会话的Groovy组件,则添加SwingX,但我认为JTextPane就足够了。


部署

就部署而言,这比看起来要棘手得多。许多桌面计算机不会默认安装Java。那些已经安装了Java的可能会有旧版本。

  1. 为确保可用于运行应用程序的最低JRE版本,请使用deployJava.js(在下面的JWS页面中提到并附有链接)。
  2. 要为用户提供“一键式”启动体验,请查看Java Web Start

跨平台的陷阱

不幸的是,虽然Java是跨平台的,但程序员可以做很多事情来破坏它。例如:

  • 未考虑平台默认值:
    • 文件编码(file.encoding2
    • 换行符(line.separator2
    • 文件分隔符(file.separator2
  • 编写固定大小(“绝对布局”)的应用程序,这些应用程序在其他操作系统上显示为不同大小的应用程序。
  • ...

注2. 显示每个属性要使用的属性。


时间表

显然,我不能代表你说话,但我可以告诉你,我在两个月内从“选择技术”到“可部署的应用程序”是不可能的。

希望你比我更有能力! ;)


谢谢 Andrew!我会看看 Swing 和 SwingX。得到帮助肯定很重要。谢谢! - serverman
嗨,安德鲁,你对一键安装程序有什么想法吗?一个朋友推荐了“izpack”。 - serverman
嗨,安德鲁,谢谢你!我已将你的回答标记为正确答案。我意识到你指出的一些问题 - 但最重要的评论是关于时间表的评论 - 谢谢! - serverman

1

您说您想要一个 Java 解决方案,但请注意 Python 有大量 GUI 选项,而且您已经使用 Python 编写了您的 Web 应用程序。

Groovy 是一种不同于 Java 的编程语言,但 Groovy 运行在 JVM 上。您想要一个 Java 解决方案还是一个 JVM 解决方案?我问这个问题是因为你提到了 Griffon。

假设您想要 Java,我认为您的主要选择是 Swing、SWT、JavaFX 2 和 Apache Pivot。Oracle 已经表示他们打算将 JavaFX 作为首选的 GUI 平台 替代 Swing。话虽如此,JavaFX 2 还处于起步阶段,目前仅提供 Mac 的预览版。JavaFX 和 Apache Pivot 的好处是您可以同时用于 Web 应用程序和桌面应用程序。


嗨procrstiate_later(非常鼓舞人心的用户名:) - 谢谢!考虑到在使用Python编写的Web应用程序和Python GUI之间没有看到太多的代码重用,我认为如果我在客户端使用Java或Python可能并不重要(尽管我更喜欢Python,但有其他原因我选择了Java(维护可能被外包)。 - serverman
如果您选择使用Pyjamas和Pyjamas-desktop,我认为您可以在Web应用程序和桌面应用程序之间进行代码重用。我没有使用过它们,所以不知道它们的好坏。此外,我对外包几乎一无所知。如果您选择Java解决方案,我建议您考虑使用Java Web Start进行部署。 - procrastinate_later

0

您可以尝试通过以下小步骤实现: * 首先,您可以使用 SWT 创建一个应用程序,并将应用程序嵌入浏览器控件中。 * 然后,您应该逐个从 Web 应用程序将页面和一些控件移动到桌面应用程序中。

通过这种方式,您可以在几个小时内获得最小的应用程序 :)

P.S. 如果您想要使用这种方法创建 iOS 应用程序,那么值得看看这个开源项目:http://en.wikipedia.org/wiki/PhoneGap


嗨,Konstantin,我为打字错误道歉 - 我的意思是“Mac” - 而不是iOS。是的,我知道phonegap,但据我所知,它并不涵盖桌面应用程序。 - serverman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接