【问题标题】:Java Desktop application: SWT vs. Swing [closed]Java 桌面应用程序:SWT 与 Swing [关闭]
【发布时间】:2011-01-19 08:32:57
【问题描述】:

我白天是一名网络开发人员,正在考虑构建我的第一个真正的桌面应用程序。我们的想法是构建一个工具,在没有可用 API 的 Web 应用程序中自动执行非常重复的任务。

我知道我想使用 Java。我之前将它用于网络内容,非常了解语法并希望应用程序尽可能简单地跨平台。

我不太确定应该使用 SWT 还是 Swing。由于我的主要受众使用 Windows,因此我希望它看起来尽可能本地化。 Linux 和 Mac 应该可以工作,但外观在这里并不那么重要。

那么支持和反对每个 UI 框架、Swing 或 SWT 的论据是什么?

谢谢。

PS:我使用 Eclipse 在 Windows 上进行开发。但正在考虑与 Netbeans 一起玩。

【问题讨论】:

  • 棘手的问题。 :-) 我会选择 Swing。但是,对于该决定没有任何优点或缺点。
  • 重复 Q。请在 SO 上查找 Swing 与 SWT Q 的问题。 FWIW,我使用 Swing 只是因为我是这样学习的。有本地外观库(参见 jgoodies 外观)
  • “构建一个工具,在 Web 应用程序中自动执行一项非常重复的任务” - 有这方面的信息吗?可能有一个现有的工具 - 我质疑桌面应用程序是否需要自动化 - 它现在可能适用于您的情况 - 但如果您转向托管解决方案怎么办?
  • 您无需学习桌面应用程序的 GUI 框架。如果您可以使用 html css 和 js(我假设您是),您可以使用 Electron 使用 Web 语言构建具有原生外观的应用程序。
  • 电子是在我问这个问题几年后发明的;)但今天你当然是对的。

标签: java swing swt


【解决方案1】:

职业摇摆:

  • java 库的一部分,不需要 其他原生库
  • 在所有平台上都以相同的方式工作
  • Netbeans 和 Eclipse 中的集成 GUI 编辑器
  • Sun/Oracle 提供的优秀在线教程
  • 官方 java 扩展支持(如 java OpenGL)

缺点摇摆:

  • 本机外观和感觉可能会表现 与真正的本地人不同 系统。
  • 重型组件(本机/awt)隐藏了摆动组件,大部分时间都不是问题,因为使用重型组件相当罕见

优点 SWT:

  • 尽可能使用原生元素,因此始终采用原生行为
  • 由 eclipse、gui 编辑器 VEP 支持(VEP 还支持 Swing 和 AWT)
  • 网上大量例子
  • 有一个集成的 awt/swt 桥,允许使用 awt 和 swing 组件

缺点 SWT:

  • 需要每个本地库 支持的系统
  • 可能不支持所有系统上的所有行为,因为本机 使用的资源(提示选项)
  • 管理原生资源,而原生组件通常会与其父级资源一起被释放,而其他资源(例如字体)必须手动释放或注册为组件的释放侦听器以自动释放。

【讨论】:

  • Swing 将更接近“一次编写,随处运行”。 SWT 将更像是“一次编写,随处调整/测试”。但同样的讨论也发生在其他语言上。
  • 实际上,Swing 的“本机”外观和感觉与我的 Gnome 桌面有很大不同——而出于某种原因,主题运行良好,菜单看起来很糟糕,几乎无法使用。
  • 从 Eclipse 3.7 开始,VEP 被 WindowBuilder(同时支持 Swing 和 SWT)取代。
  • SWT 的优势还在于由于使用了原生组件,内存消耗更少。这在内存有限的机器上应该是可取的,并且在大型 GUI 设计中,swing 和 swt 之间的内存差异可能很大。
  • @JanTobola 这完全是错误的。本机组件使用在本机堆上分配的内存,而不仅仅是在 Java 堆上。我曾使用 Netbeans 平台、Eclipse RCP、SWT 和 Swing 处理大型 GUI。在 Java 的早期版本(当它是第三方库时以及从 1.1 到 1.2 之后,Swing 中的内存占用存在一些严重问题? ) 但它不再是正确的,开发人员需要在 SWT 中释放大量资源,使用 SWT 有更多的内存泄漏机会,而未引用的组件最终会被 Swing “处置”。
【解决方案2】:

需要考虑的重要一点是,一些用户和一些经销商 (Dell) 在他们的 64 位 Windows 上安装了 64 位 VM,而您不能在 32 位和 64 位 VM 上使用相同的 SWT 库。

这意味着您需要根据用户使用的是 32 位还是 64 位 Java VM 来分发和测试不同的包。例如,请参阅 Azureus 的 this problem,但您也可以在 Eclipse 中使用它,截至今天,前端下载页面上的构建不在 64 位 VM 上运行。

【讨论】:

  • 有趣的地方。作为用户,我仍然不明白为什么这很重要。但是,好吧,所以我将不得不考虑这一点。谢谢。
  • 顺便说一句:javaws (webstart) 不适用于 64 恕我直言
  • @Karussell:截至 2011 年 3 月 4 日,Sun 的 64 位 Windows JVM 支持 JNLP。我认为这已经有一段时间了,但我不确定持续了多久。
【解决方案3】:

职业挥杆:

  • 恕我直言,swing 的最大优势是您无需将库与您的应用程序一起提供(这避免了几十个 MB(!))。
  • 原生的外观和感觉比早年更适合摇摆
  • 性能堪比swt(swing不慢!)
  • NetBeans 为 Matisse 提供了一个舒适的组件构建器。
  • 在 JavaFX 中集成 Swing 组件更容易。

但归根结底,我不建议使用“纯”摇摆或 swt ;-) swing/swt out 有几个应用程序框架。 Look here。 最大的参与者是 netbeans (swing) 和 eclipse (swt)。另一个不错的框架可能是 griffon,一个不错的“组件集”是 pivot(swing)。 Griffon 很有意思,因为它集成了很多库和not only swing;还有pivot、swt等

【讨论】:

  • 是的,NetBeans 将 Matisse 作为 GUI 构建器,但代码非常冗长,难以阅读,而且几乎无法通过源代码进行编辑。如果您真的想要 GUI 构建器,请使用 Eclipse WindowBuilder
【解决方案4】:

出于几个原因,我会使用 Swing。

  • 它存在的时间更长,并且有 更多的开发工作应用于 它。因此,它可能具有更多功能 完整并且(也许)有更少的错误。

  • 有很多文档和 其他生产指导 高性能应用程序。

  • 看来 像对 Swing 的更改传播到 所有平台同时同时 SWT 的更改似乎出现在 首先是 Windows,然后是 Linux。

如果您想构建功能非常丰富的应用程序,您可能需要查看NetBeans RCP(富客户端平台)。有一个学习曲线,但您可以通过一些练习快速组合出不错的应用程序。我对 Eclipse 平台的经验不足,无法做出有效的判断。

如果不想使用整个RCP,NetBeans还有很多有用的组件可以抽出来独立使用。

另外一个忠告,看看不同的布局管理器。他们在我学习的时候绊倒了我很长时间。一些最好的甚至不在标准库中。 MigLayout(适用于 Swing 和 SWT)和 JGoodies Forms 工具是我认为最好的两个。

【讨论】:

    【解决方案5】:

    我会选择 swing 只是因为它是 java 的“原生”。

    另外,看看http://swingx.java.net/

    【讨论】:

    • 链接已损坏!
    【解决方案6】:

    根据您的要求,听起来最重要的是使用 Swing,因为它更容易上手,并且不像 SWT 那样紧密集成到本机平台。

    摇摆通常是一个安全的赌注。

    【讨论】:

      【解决方案7】:

      有趣的问题。我不太了解 SWT,无法吹嘘它(与 Swing 和 AWT 不同),但这是在 SWT/Swing/AWT 上进行的比较。

      http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

      在这里,您可以获取有关 SWT 的任何内容的教程 (http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm)

      希望你做出正确的决定(如果在编码中有正确的决定)... :-)

      【讨论】:

      • 但请注意这篇文章来自 2003 年...
      【解决方案8】:

      需要考虑的一件事:屏幕阅读器

      由于某些原因,某些 Swing 组件在使用屏幕阅读器(以及适用于 Windows 的 Java AccessBridge)时无法正常工作。知道不同的屏幕阅读器会导致不同的行为。根据我的经验,SWT-Tree 与屏幕阅读器结合使用的性能比 Swing-Tree 好得多。因此,我们的应用程序最终同时使用了 SWT 和 Swing 组件。

      为了分发和加载正确的 SWT 库,您可能会发现此链接很有用: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

      【讨论】:

        【解决方案9】:

        如果您计划构建一个功能齐全的应用程序,其中包含多个功能,我建议您直接使用 Eclipse RCP 作为框架。

        如果您的应用程序不会变得太大,或者您的需求太独特而无法由正常的业务框架处理,那么您可以安全地使用 Swing。

        归根结底,我建议您同时尝试这两种技术,以找到更适合您的一种。就像 Netbeans 与 Eclipse 与 IntelliJ 一样,这里没有绝对正确的答案,两种框架都有各自的缺点。

        专业摇摆:

        • 更多专家
        • 更像 Java(几乎没有公共字段,无需对资源进行处置)

        专业版 SWT:

        • 更多操作系统原生
        • 更快

        【讨论】:

        • 我认为“更快”这一点很有争议。
        • SWT 使用起来很麻烦,我必须在每个版本的 Windows 上测试我的 GUI,一些错误只能在 Windows Vista 下重现。有些方法根本未实现或在后台调用 AWT,这意味着您不能在没有 AWT 和 Swing 的情况下使用紧凑的 JRE 而不会冒破坏 SWT 的风险。我在 2009 年开始使用 SWT,以我的拙见,它并不快。我建议您提供一个精心设计的基准。
        【解决方案10】:

        创建 SWT 是为了应对世纪之交的 Swing 迟缓。既然性能差异变得可以忽略不计,我认为 Swing 是标准应用程序的更好选择。 SWT/Eclipse 有一个很好的框架,可以帮助处理大量样板代码。

        【讨论】:

          猜你喜欢
          • 2012-12-12
          • 2013-05-17
          • 2011-02-15
          • 1970-01-01
          • 1970-01-01
          • 2011-08-04
          • 2010-09-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多