有没有Java内核/桌面应用程序?

时间:2010-01-05 08:52:10

标签: java cross-platform desktop-application

在Windows / Linux平台上,我作为一个普通的计算机用户,几乎找不到任何用Java编写的软件。

  • 两个操作系统(Windows和Windows) Linux)是用C语言编写的。
  • 两个网络浏览器(IE和Firefox)是 用C ++编写。
  • 这两个Web服务器(IIS和Apache)是用C ++编写的。
  • 大多数数据库管理系统都是用C / C ++编写的。

我找不到在桌面应用程序领域用Java编写的软件。程序员似乎更喜欢使用跨平台的Widgets(Qt,wxWidgets等)而不是Java。

我的问题是:

  1. 为什么Java不适合做 内核应用程序?如果原因是 它的缓慢,多少次 比C / C ++慢?
  2. 为什么程序员更喜欢使用C / C ++来做桌面应用程序,尽管Java提供了一致且优秀的API库。我认为使用Java代替C / C ++来开发大多数桌面应用程序(例如纸牌游戏)和开发的代码应该更少应用程序可以轻松部署到其他平台。
  3. 用户方面是否有使用Java完成的任何着名应用程序(意味着我们每天都使用它)?
  4. 感谢。

8 个答案:

答案 0 :(得分:7)

  1. 至少有一些用Java实现的操作系统,即JNodeJOSJX。当然,在Java发布之前,您不会看到任何以该语言实现的操作系统。此外,对操作系统内核的托管语言似乎存在长期偏差;有一些研究项目,如Singularity,尝试这种方法的可行性,但我们还远远没有准备好“正常”使用。但是,您将始终需要一个内核“核心”,它在汇编或其他低级语言中完成,这使您可以访问通常不具备的部分。但这可以保持很小。

  2. Java API是一致的还是优秀的可能是有争议的,但对于许多环境而言,首选语言是C(主要是UNIX喜欢,Windows API的许多部分),Objective-C等衍生产品(Mac) OS X)或C ++(Windows,KDE,Qt上基于COM的编程)。这并不意味着无法以其他语言执行此操作,但文档通常假定您坚持使用首选语言。您显然需要考虑的另一个重要因素是您需要在目标系统上使用JVM。我所知道的唯一一个本地使用Java的操作系统是Mac OS X.所以你会打扰用户有额外的依赖。像微软这样的公司也非常不愿意考虑发布他们无法用Windows控制的第三方软件,所以你永远不会看到JVM在那里发布操作系统。 (是的,曾经有一个Java 1.1,iirc,但那些日子早已过去,不太可能返回。而且那个是微软自己提供的。)

  3. 大多数Java开发人员可能每天至少使用一个,例如Eclipse和Netbeans是用Java编写的。和其他一些软件开发工具一样,例如MavenAnt。另一个受欢迎的程序是例如Vuze(以前的Azureus)BitTorrent客户端。但至少对我来说,目前我甚至没有多少Java桌面应用程序,我甚至每周都会使用它。

    但是,对于Web应用程序来说,这是完全不同的,因为你无法真正地告诉他们从外面写的是什么。

答案 1 :(得分:6)

<强> 1
Java不适合内核开发。主要原因是控制。这不仅仅与速度有关(尽管这是速度的一部分)。 Java不会给程序员提供与内存相同的控制权,而不是代码的执行方式。在C / C ++中,您通常可以根据代码猜测完全将创建哪个汇编代码。在Java中不是这样。

注意:对于C以及部分 C ++也是如此:如果您在C ++中使用了许多更高级别的功能,那么您显然已经拥有同样失控。但是C ++可以选择任何一种方式。

<强> 2
出于多种原因,C / C ++比Java更适用于桌面。可能其中一些是历史的(它们已被用于更长),可能其中一些是“外观和感觉”的问题,这基本上意味着Java程序往往看起来像Java程序,并不像用户机器上的大多数程序(有解决方案,但过去几乎所有Java程序都是如此,这使得程序员远离它们)。

但我认为,最重要的是要理解的是,现在使用C和C ++的GUI也少得多。显然它们仍在使用,但很多程序员正在转向其他语言,如C#和其他语言。

第3
如果您正在谈论着名的桌面应用程序,我认为最着名的(当然是程序员)是Eclipse。它也是一个非常棒的应用程序,当然看起来很棒,这只是向您展示Java 可以用于看起来很自然的桌面应用程序。

我真的不知道其他任何人。

答案 2 :(得分:4)

用Java编写的最着名的应用程序之一可能是Vuze(以前称为Azureus),Windows和Linux的bittorrent客户端。

答案 3 :(得分:2)

我质疑你对“内核应用程序”的使用,我认为没有这样的术语。 某些代码是操作系统内核的一部分,在这种情况下,它通常是用OS的语言编写的,或者它是一个应用程序,在这种情况下,它可以用操作系统支持的任何语言编写。

现在有很多用过的,可能是“基本”的应用程序,有些人可能称之为“核心”应用程序,如浏览器,DBM等。也许这就是你所说的。

大多数应用程序都有可视化界面。所有的C / C ++程序都具有或多或少的共同和共享的外观(一些常见的工具包),并且可以通过操作系统中的设置进行某种程度的修改。 Java(通常)“做”自己的外观和感觉,它通常看起来与其他常见的外观有很大不同;很多人认为它很难看。

Java的性能同时与C应用程序相当,但不包括JVM启动。 Java程序启动需要相对较长的时间,用户讨厌等待。

少数数据库引擎是用Java编写的。想到德比,我认为是HQL。但这不是软件用户看到的。同样,Web应用程序服务器Jetty和Tomcat是用Java编写的,当然还有企业应用程序服务器,如WebSphere,WebLogic,JBoss,GlassFish。但同样,这些不是用户应用程序。

答案 4 :(得分:2)

  

为什么Java不适合做内核应用程序?如果原因是它的速度慢,那么它比C / C ++慢多少?

Java是在虚拟机上运行的。要使其在某处运行,必须将此内核(使用C ++编写)移植到平台。其主要原因是目前没有(普遍的)CPU能够原生地理解Java。常见的CPU只能理解汇编。

今天,Java和C / C ++相当。

  

为什么程序员更喜欢使用C / C ++来做桌面应用程序[...]?

因为Microsoft不支持Java(至少与C#不同)。

  

用户方面是否有使用Java完成的任何着名应用程序(意味着我们每天都使用它)?

'net上的大多数服务都是用Java编写的。你手机上的很多软件都是Java。随着Qt JambiSWT的出现,Java应用程序看起来和感觉就像任何其他类型的应用程序(包括疯狂的启动时间),所以这不再那么明显了。

为什么没有做广告的原因是a)人们仍然相信“Java是慢的”神话和b)人们不关心用哪种语言写的东西。他们关心它是否适合他们。此外,在部署方面,Sun确实引爆了它。要从VisualStudio创建Windows安装程序,只需单击一个按钮即可。对于Java,它需要编写启动脚本,许可证问题,大小问题(我是否包括JRE?),担心你不能在PC上安装多个Java,等等。此外,小程序没有'真的有助于收集对Java的积极情感。

答案 5 :(得分:1)

  

为什么Java不适合做内核应用程序?如果原因是它的速度慢,那么它比C / C ++慢多少次?

这不是真的或不一定是唯一的原因。像操作系统这样的内核应用程序需要访问内核以及java可以访问的机器是虚拟的。

  

为什么程序员更喜欢使用C / C ++来做桌面应用程序,尽管Java提供了一致且优秀的API库。我认为使用Java而不是C / C ++开发大多数桌面应用程序(例如纸牌游戏)应该需要更少的代码并且开发的应用程序可以轻松部署到其他平台。

这是正确的,但事实证明,为了在桌面应用程序中获得无缝体验,您需要访问许多本机资源。 Windows,Linux和OSX有其自身的复杂性,大多数Java应用程序看起来不合适。

使用本机库可以与主机系统无缝集成。

然而,我认为用Java编写应用程序的所有公共部分和核心是可行的,然后添加一些本机代码以便在主机中正确挂钩。

IDE就像编写NetBeans,Eclipse和Idea一样。

关于浏览器和其他主要应用程序,它们在C ++中的原因不仅仅是它的速度,而且它们是几十年来的遗留代码。

仅举几个例子。谷歌Chrome,从WebKit继承了很多代码,数十万行。你可以说他们只是做了浏览器的“浏览器”(这很容易)

  

用户方面是否有任何着名的Java应用程序(意味着我们每天都在使用它)?

你听说过 gmail LimeWire吗?

答案 6 :(得分:0)

  1. Java不适合编写内核程序,因为Java程序设计为在虚拟机下运行而不是本机操作。在虚拟机下,我们可以做的事情将受到限制,以换取更高的安全性。速度在这里几乎不是主要问题。

  2. 我不确定那里的其他开发人员,但我的个人经验是,尽管声称Java是“一次编写,随处运行”,但JVM存在相当多的不一致行为在不同的操作系统下。为了克服这些不一致性,开发人员可能必须在其程序中提供变通方法以提供独特的用户体验。在最坏的情况下,如果不修改JVM本身就无法修复它。因此,使用C / C ++库来实现跨平台基础可能会减少痛苦,因为您可以控制所写的所有组件。

  3. 有一个名为Vuze的bittorrent客户端(以前是Azureus),这是一个非常着名的IMO。你可以看看here

答案 7 :(得分:0)

你听说过Limewire吗?