在Windows / Linux平台上,我作为一个普通的计算机用户,几乎找不到任何用Java编写的软件。
我找不到在桌面应用程序领域用Java编写的软件。程序员似乎更喜欢使用跨平台的Widgets(Qt,wxWidgets等)而不是Java。
我的问题是:
感谢。
答案 0 :(得分:7)
至少有一些用Java实现的操作系统,即JNode,JOS和JX。当然,在Java发布之前,您不会看到任何以该语言实现的操作系统。此外,对操作系统内核的托管语言似乎存在长期偏差;有一些研究项目,如Singularity,尝试这种方法的可行性,但我们还远远没有准备好“正常”使用。但是,您将始终需要一个内核“核心”,它在汇编或其他低级语言中完成,这使您可以访问通常不具备的部分。但这可以保持很小。
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,但那些日子早已过去,不太可能返回。而且那个是微软自己提供的。)
大多数Java开发人员可能每天至少使用一个,例如Eclipse和Netbeans是用Java编写的。和其他一些软件开发工具一样,例如Maven或Ant。另一个受欢迎的程序是例如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 Jambi和SWT的出现,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)
Java不适合编写内核程序,因为Java程序设计为在虚拟机下运行而不是本机操作。在虚拟机下,我们可以做的事情将受到限制,以换取更高的安全性。速度在这里几乎不是主要问题。
我不确定那里的其他开发人员,但我的个人经验是,尽管声称Java是“一次编写,随处运行”,但JVM存在相当多的不一致行为在不同的操作系统下。为了克服这些不一致性,开发人员可能必须在其程序中提供变通方法以提供独特的用户体验。在最坏的情况下,如果不修改JVM本身就无法修复它。因此,使用C / C ++库来实现跨平台基础可能会减少痛苦,因为您可以控制所写的所有组件。
有一个名为Vuze的bittorrent客户端(以前是Azureus),这是一个非常着名的IMO。你可以看看here。
答案 7 :(得分:0)
你听说过Limewire吗?