Java用于开发桌面应用的优劣分析
我承认即使在JavaFX出现之前Java已经在桌面领域做出了一些重大的提升 比如Swing中的提升 我们现在也有了很棒的OpenGL DirectX也有了很大的提升 启动时间也显著提升了 没错 Java在去年做了很多显著而有效的工作
然而不得不说的是 除此之外其他的仍是一塌糊涂 比如Java sound实际上并不好用 被遗弃的Java D又如何呢?最近甚至JOGL也被Sun遗弃 包括很久之前的SwingLab JAI(用作图片处理)多年未真正升级过 看起来也没有在什么地方得到利用 它迫切需要性能上的巨大提升以适应来临的多核GPU时代所有这些应用于桌面领域的Java产品不是被遗弃就是成为鸡肋
而且很关键一点是 尽管我们可以用Java创建出桌面应用 但只要我们想开发真正的富桌面应用我们就无法真正使用Java而使用JNI C/C++和平台依赖的libraries等
使用Java构建桌面应用更多的是困难和麻烦 比如即便想要在Java应用内创建一个高效的优良的web浏览器都是一件难事 而且没有用Java编写的图片处理应用 没有一个纯粹的Java web浏览器 没有数字音频应用 没有 D建模器 没有矢量图形编辑器 没有先进的光栅编辑器 Java今日在桌面端所到达的高度只能满足那些服务器开发者 因为他们只需要在远程服务时使用电脑桌面上的简单界面
过去我们一直说这是因为Java太慢 无法在一个慢的平台上开发出如此复杂的应用 但我们这样说是错的 原因有两点 一 Java从来就没有慢过 即便有些部分曾经慢过 但没有人怀疑当它需要被用到服务器端时它会迅速地得到提升 比如JITs GCs等 这一点也正是Java语言卓越的地方 二 由于Java平台的天然特性 Java应用总是第一个利用市场上新硬件和新操作系统的应用 一旦JVM被配置到了一个新系统中 几乎不需要任何编辑和调试 Java应用就可以在上面全速运行 比如你在 位的操作系统上开发了一个应用 它就可以全速运行在Windows 或者Solaris的 位JVM上 所以所谓的Java太慢根本不能成为Java在桌面端碌碌无为的借口
而且 如果你是一个终端用户 你甚至不需要从网站上重新下载应用 这意味着不仅终端用户和开发者得到了速度提升 甚至应用的执行性能的前边也得到了速度提升 今天 JIT在runtime为本地操作优化代码已经做得很棒了 这意味着你可以挖掘出你运行的硬件的全部的能力 这是一个静态编译语言永远也无法竞争过的性能 只是这个性能如果可以运用到桌面端和游戏领域就好了
我们总是说 由于Sun总是一个服务器端公司的原因 Java在桌面端一直没有真正的机会 而Oracle的收购让这种境况看起来不会有什么改变 希望这不要再继续下去 为了Sun Oracle和Java自身的利益 Oracle内部的知名人士应该提醒公司来让他们知道 如果缺乏了在桌面端的能力和效率 必将影响Java的普及率甚至它在服务器端的占有率
我们一直以来习惯着Sun主要提供服务器端服务 因而想象著未来更多的处理能力还是出现在服务器端 而客户端不过是连接服务器的简单服务 这种情况已被证明是绝对错误的 因为未来的桌面应用将服务 应用与硬件所有的运算能力相结合 大量的数据和解码 声音 图像 视频被开发者处理 而且用并行编程的方式来实现 既保证了丰富的性能又保证了速度 对开发者来说 未来的服务既需要他们在客户端处理也需要在服务器端处理 执行复杂的搜索 图像 视频以及虚拟 D环境需要服务器端的技术 而远程服务如医学分析 远程教育和远程会议等则需要客户端能力
只是令我们感到失望的是历史又一次地重复了 因为至今Java中还没有什么大的动作
armin Ehrenreich 在回复中说道 说的好 我完全认同
确实迫切需要跨平台的桌面应用技术 而且我不认为C++结合Qt是个好的选择 你说阐述的问题之所以没有引起很多的共鸣 我想是文化上的问题 许多Java社区的人们包括Sun内部的负责人无法理解你所说的 所以我断言Oracle也不会对Java做出什么大的改变
客户端现在基本上被微软和Apple包揽 到Cocoa论坛中会发现他们谈论的是GUI的可用性 响应性 终端户如何处理桌面应用等而我们的论坛呢 大部分人认为应用的未来在服务器端 这就是文化上的差异
但是桌面技术需要做很多工作 Swing很慢很慢地进化 连同Netbeans平台 Java D JOGL等应用勉强成为了桌面端的一个选择 但Sun置此境遇于不顾 只是模仿Flash发布了一款新的脚本语言 但是那些API只有使用JavaFX才可用
Jeff Martin回复道 正确的观点 但我有一点不同 Sun真正的问题是他应该吃自己的饭 用自己的力量来用Java写一些实在的桌面应用 这可以证明他们关于Java在桌面端的承诺 证明他们可以写出应用 提升框架和工具 我不认为另一个框架会帮助Java
James Sugrue回复道 我同意作者观点 我也很支持桌面端开发 看看现在处于开发中的Eclipse e 中的一些项目 它们为桌面和浏览器提供了一个解决方案 所以我想还是有一些希望的 但我认为我们不需要过分聚焦于桌面端 JavaFX是正确方向上的一个迈进 只是无法在Swing和Java D/JOGL中看到应用提升
Osvaldo Doederlein回复道 我认为JOGL的支持没有那么糟糕 毕竟它是JavaFX Desktop Runtime的一个依赖 实际上 我们可以写一个非JavaFX的小程序 而且不需要请求本地代码的许可性就可以配置
lishixinzhi/Article/program/Java/hx/201311/25625