Java Swing GUI框架有哪些缺点?[关闭]


11

我已经将Java Swing用于某些桌面应用程序。但是我没有使用太多其他GUI框架,因此无法进行比较。

肯定有一些我喜欢Swing的东西,有些我不喜欢,但这就是几乎所有情况。

Java Swing GUI框架的最大缺点是什么?


2
问题很棘手。我也想知道,与QT,GTK,SWT,Winforms和Cocoa等相比,Swing的优缺点是什么?也许您应该改写标题以要求进行比较,而不是缺点缺点通常会带来争论不休的答案)
barjak 2011年

Answers:


3
  1. 您必须在某个地方安装Java。当然,所有GUI框架都是如此,但是Java感觉到2吨大猩猩。它的负载越来越好,但是那些早期的Java applet日子使很多人望而却步。如果只需要它来运行一个应用程序,则需要大量维护才能使其与安全补丁等保持同步。每个人都必须拥有适用于youtube的Flash,.net框架会在幕后安装,每个人的浏览器都启用了javascript。Java通常是一件额外的事情。

  2. 尽管它可以一次写入,但可以在任何地方运行,但您仍然发现Mac OSX没有要使用的新奇东西,或者一个客户端拒绝通过JRE 1.4升级其mandrake linux。

  3. 作为开发人员,您必须考虑线程。而且这是一种棘手的方式,因为可以使用多线程,但是像所有的单线程一样假装。但是,随后引入的库中有一半具有一定程度的多线程,并假定您了解EDT invokeLater,并且这使很多课程难以完成。

  4. Swing经验不会轻易转移到其他类型的UI开发中。例如,如果您是.css中表格的专家,那么Jtables,渲染器,编辑器等将完全使您处于混乱状态。

总的来说,Swing的主要问题在于它没有达到其营销方式。对于许多用例来说,这是一种完全合适的技术,但是在最初的5到6年中,它们充满了糟糕的实现和糟糕的applet。而现在,它是一种古老的技术-可用于Web 3.0或其他任何技术。

综上所述,我确实喜欢Swing,并且认为当您需要它的好处时,优点通常胜过缺点。但是,Web体验现在无处不在,以至于许多用户将比最精简的令人惊叹的swing应用程序更轻松地使用Web应用程序。虽然有很棒的Swing应用程序,但是它们似乎并不是主流。


1
我和OP的处境相同:我知道Swing,并且在将其与其他GUI进行比较时感到很吃惊。对我来说,第1、2和4点与这个问题无关。因此,我想对第3点做出反应:能否请您提供一些多线程GUI工具箱的示例?谢谢。
barjak 2011年

2
@barjak:多线程GUI是一个错误。我所知道的唯一一个是旧的Java AWT。但是他们从设计Swing的错误中学到了知识,Swing是所有现代GUI框架的单线程。
乔纳斯(Jonas)

@Jonas让开发人员考虑多线程通常是一个错误,但是如果没有某种程度的多线程,您将无法运行动画,进行RMI调用或进行大量计算(记住,这是一个胖客户端工具包)。
史蒂夫·杰克逊

3
@Steve:是的。但是,你应该不会做RMI调用,并在GUI线程激烈计算。这种事情应该在后台线程中完成,就像在Swing和WPF中一样。
乔纳斯(Jonas)

@barjak-Windows窗体,MFC,SWT,pyQT,Juce...。我很难思考那些不是多线程的。尽管通常使用相同的规则,但是除了创建它们的线程之外,您无法触摸GUI组件。
史蒂夫·杰克逊

2

乔纳斯

Swing概括了您的基础架构,以为您提供平台中立的用户体验。唯一的重量级组件(由操作系统提供)是JFrame容器,其余的大部分由Swing管理员处理。另一方面,AWT要求OS绘制所有UI组件,这意味着在使用特定于OS的本机UI组件时,它在许多方面都更快。SWT试图为各种标准组件(例如大多数操作系统上可用的按钮和标签)取得中间立场,让OS处理这些组件,而对于其他专用组件,SWT将为您处理创建。

话虽如此,我可以概述一下缺点。

(1)由于该工具包为您创建和呈现了组件,而不是询问操作系统,因此您无法利用操作系统提供的内置组件的速度。

(2)对于大多数OS平台,关于用户使用的外观和感觉,UI并不特别吸引人。

(3)可以更好地简化某些布局管理器,例如GridBadLayout等。我已经失去了我所从事的项目数量的计算,在那些项目中人们已经用一些定制的代码包装了GridBagLayout,从而获得了一种更简单的使用方式。

我建议您使用AWT,Swing和SWT编写一个简单的应用程序,然后将开发方法与最终产品进行比较,然后查看其他开发人员的各种意见,并确定哪种方法效果最好。我已经与Swing一起工作了很多年,并且使用了不喜欢SWT的方法,但是我逐渐意识到,与其他框架相比,Swing比需要的复杂得多。


4
Swing是GPU加速的,它并不经常使用本机框架,因此我实际上认为Swing更快。这也是Windows上的WPF但没有WinForms的策略(仅在某些版本的Windows上)。如果它非常可定制,或者您可以使用平台自己的LaF,那么“ [ugly] ...关于您使用的外观和感觉”如何成立?我同意布局经理真的很糟糕。
乔纳斯(Jonas)

乔纳斯(Jonas),与其他框架相比,挥杆的“可定制”方面使它变得棘手。如果您尝试从操作系统提供的功能中抽象出来,那么您将失去其提供的许多好处。Swing的第一个版本是一场噩梦,这首先导致了SWT的创建。后来,Swing进行了改进,使其速度更快,并且您拥有诸如SwingUtilities之类的类,它们为GUI提供了更好的线程支持。
荒凉星球

丑陋的单词可能是错误的;外语可能是一个更好的词,因为外观与本机UI外观并不完全相同,据我所记得,您拥有Java,主题,金属和其他一些元素,但总的来说,它们不是这么漂亮。
荒凉星球

做比较时,接下来要看的是开发UI所涉及的工作。我不会说布局管理器真的很糟糕,总比没有布局要好(我必须在移动设备上处理),但是他们并没有努力简化模型。
荒凉星球

我认为,根据您的发言,您一直在使用较新版本的Swing,但是当它刚发布时,人们就非常不喜欢它,甚至在尝试提供基于Swing的applet时更是如此。用Java开发的UI框架有很多历史,如果您研究它,这将是一个有趣的阅读。
荒凉星球

-2

Swing速度慢(性能差),难以使用/笨拙(与许多其他工具相比),并且在某些平台上看起来不太好,实际上非常不好。


5
我发现它速度很快(与许多本机GUI相比,它具有GPU加速),所以我不同意性能,或者您有任何示例吗?与其他框架相比,它有多困难和笨拙?我同意它的外观不太好,但是可以将其配置为看起来像本机应用程序或使用自定义LaF。
乔纳斯(Jonas)

在GTK上,它看起来或多或少都是非本地的。我所听到的是,由于它依靠Java 2D绘制小部件,因此速度很慢,但是我没有任何证据可以证明这一点。Qt和GTK对我来说都不太笨拙,但是口味有所不同。
安托

嗯,它在某些平台上的表现可能会更差。我只在GPU加速非常快的Windows上使用过它。
乔纳斯(Jonas)

6
人们仍然抱怨某些东西看起来不自然,而使用越来越多的浏览器事物(例如:stackexchange),每个页面看起来都不一样?和速度?大多数情况下,交互式GUI程序正在等待用户。
用户未知

2
大多数“时髦”程序看起来不再是本机的。在这方面,摆动最终不会好坏。我们的50kloc swing应用(胖客户端)的性能似乎还不错。比“本机”应用程序更容易达到崩溃的目的。
Tim Williscroft 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.