自己用java编了个程序,运行程序是会出来个功能界面。(类似qq仙境的游戏界面) 问题

为什么很多人说 Java 不适合编写桌面应用?
请大家解释一下,谢谢。
Java的桌面程序并不少,其中最为知名的莫过于Eclipse。在Linux和Mac下,Java程序的比例远高于Windows下。不过,“Java不适合写桌面应用”的说法有一定道理,论调的主要背景是供Windows下使用的企业桌面应用的开发。由于一些历史和定位的原因,对于这种GUI程序的需求,Java的优势不明显,劣势比较明显。这事还得从Java的传统,“跨平台一致性”说起。在写后台逻辑的时候,跨平台是好东西。很多公司都是在Windows下开发,在Linux下部署,方便。但涉及到GUI的时候,跨平台就成了个“看上去很美”的东西。理论上,我写个窗口,在Windows和Mac下都一样能用,那是多么美好的事啊。但实际上,每个平台提供的GUI控件多多少少有点差别,一坚持跨平台,麻烦就来了,该支持多少控件,怎么支持呢。一开始,Java的思路是:那简单啊,有原生控件干嘛不用,至于不跨平台的,就不支持呗,又坚持了原则,又回避了问题。这一代的gui库,awt,就此诞生。因为Java一开始是一根筋想推广Applet的,只是“顺便”也支持本地应用,设计成这样不能说不合适,毕竟,HTML也是同样的思路,只支持几种最基本的控件。但对于想开发复杂点界面的人来说,就有麻烦了。想来个目录树吧,对不起,不支持;想来个进度条吧,对不起,不支持。旁边放着Delphi和VB这么方便的东西,哥干吗受这气啊。这样一来,Java自己也觉得说不过去了。但又要跨平台,又要提供丰富的控件支持,那就只有另起炉灶,开始用第二种思路:自己动手、丰衣足食,自己重写一套GUI控件,代替操作系统的原生控件。这一代的gui库,叫做swing。这也是一个想“彻底”解决问题的思路,但是要付出代价。代价之一就是效率。我们可以参考一下另一个相同思路的产品——flash。为了实现矢量动画,在flash的那个小框里,图是一帧一帧地算出来的。接下来的事情我们都知道了:复杂的flash动画极耗cpu;iPhone说,您太耗电了,俺就不支持了;Adobe说,那好吧,那俺也不费心折腾移动版flash了。自己画出来的控件毕竟不能跟原生控件比效率,尤其是在早期Java优化还不够完善的时候。而且,自力更生的目的只是为了平台兼容,不是为了更好的效果,这事儿其实怎么想怎么亏。代价之二就是效果。自己画的控件毕竟只是模拟,还是会有细节差别。比如著名的毛玻璃效果,这不是简单套样式就能套出来的。而且,各个平台控件的风格本来就不一样,虽然swing提供了几种外观,但大部分程序出于偷懒或是跨平台一致考虑,还是使用默认外观。默认外观跟平台不一致倒也不是问题,主要是别比平台效果土。我用着win7,一个程序非让我感觉回到xp时代,心里特别添堵。就这样,一帮人商量着,又琢磨出个新思路:做适配。平台有这个控件,就直接用,保证效率;没有,再造轮子,保证可用。就这样,swt问世。eclipse的gui就是基于此。swt是赞,不过这属于改良,两个根本问题仍在:1. 跟操作系统api打交道不是Java的长项,效率仍然不能与c++等相提并论。2. 到底要不要跨平台。如果要跨平台,swt接浏览器控件、接ActiveX控件的功能就成了形同虚设;而要是不想跨平台,又何必使用Java呢,.Net在一旁已经恭候多时了。(补充:原生控件在各平台下还是会有些差异,感谢@冯东指点)@冯东:另一方面,即使每个平台都支持的 control 也多多少少有些差异。比如同样是文本框,Windows 和 Mac (Cocoa) 对待 non-English 输入法选词的语义就不同。再比如对 focus-lost 的处理二者也不同。所以 SWT 其实目前很难做到 Swing 那样的跨平台。跨平台么,终究还是只能做到最大公约数,比如 x86 支持 4 级,Unix 只用两级。可那是大家都同意不用的。在 UI 级别可没有人能同意不用操作系统的某个功能。 除了技术本身,还有一个产业的问题,围绕着GUI控件也存在一个生态环境,没有丰富的领域、行业控件的支持,技术本身的战斗力也会大打折扣。而Java这方面的生态较为薄弱。 综上,如果一个GUI程序使用Java,通常都是有这些特征:确实是想跨平台对界面并没有太多效果的要求,界面效率也不是瓶颈相比于其他GUI工具,开发人员对Java更为熟悉比如,一些工具的管理界面,很符合
不属实啊,Jetbrains的系列IDE全是Java开发的啊,够复杂也够好用了吧只是没有marketing,用的人不多而已
Java的GUI一开始定位就不是消费者市场, Java Applet的产生是因为当时Web还没有出现一种能够展现丰富动画效果的技术。Flash的后来居上更是加速了Java Applet技术在Web中的消亡。而AWT只是为了支持Java Applet技术存在的。后来Java技术更是被SUN定位在企业开发领域,桌面领域也变得比较小众和专业化。再后来,Swing库更是一个被叫做Amy的女人弄得一团糟....Swing/AWT说实话是比较烂的,要不然IBM不会自己开发一个SWT库替代。有兴趣可以看看这篇博客,
我觉得现在如果是写新的Java桌面,JavaFX2.0应该是基于Java的最好选择了.基于Java的RCP 主要有Eclipse Netbeans平台,他们分别依赖于SWT Swing,关于Swing,Java的方向已明确说了,不会再发展Swing,将有JavaFX慢慢取代之,而JavaFX的发展,是否在iPad 智能手机上下功夫,暂且未定。但至少是作为Java 桌面的主力了
桌面程序不是现在软件的主流。你可以观察一下,java流行之后,如果需要使用桌面程序,基本上还是会考虑java的。至于java的性能问题。我觉得这个问题在现在的计算机上,不是很大的问题。java写桌面程序的优势是它的多线程支持,不足是缺乏足够可用的控件,很多东西需要自己写。swing的继承体系挺复杂的,理解起来需要一定的时间。JavaFX能够好一点但是也有控件不够丰富的问题。
尽管我们可以用Java创建出桌面应用,但只要我们想开发真正的富桌面应用我们就无法真正使用Java而使用JNI、C/C++和平台依赖的libraries等。使用Java构建桌面应用更多的是困难和麻烦,比如即便想要在Java应用内创建一个高效的优良的web浏览器都是一件难事。而且没有用Java编写的图片处理应用,没有一个纯粹的Java web浏览器,没有数字音频应用,没有3D建模器,没有矢量图形编辑器,没有先进的光栅编辑器Java今日在桌面端所到达的高度只能满足那些服务器开发者,因为他们只需要在远程服务时使用电脑桌面上的简单界面。过去我们一直说这是因为Java太慢,无法在一个慢的平台上开发出如此复杂的应用。但我们这样说是错的。原因有两点:一,Java从来就没有慢过,即便有些部分曾经慢过,但没有人怀疑当它需要被用到服务器端时它会迅速地得到提升,比如JITs,GCs等。这一点也正是Java语言卓越的地方。二,由于Java平台的天然特性,Java应用总是第一个利用市场上新硬件和新操作系统的应用。一旦JVM被配置到了一个新系统中,几乎不需要任何编辑和调试,Java应用就可以在上面全速运行。比如你在32位的操作系统上开发了一个应用,它就可以全速运行在Windows 7 或者Solaris的64位JVM上。所以所谓的Java太慢根本不能成为Java在桌面端碌碌无为的借口。而且,如果你是一个终端用户,你甚至不需要从网站上重新下载应用,这意味着不仅终端用户和开发者得到了速度提升,甚至应用的执行性能的前边也得到了速度提升。今天,JIT在runtime为本地操作优化代码已经做得很棒了,这意味着你可以挖掘出你运行的硬件的全部的能力,这是一个静态编译语言永远也无法竞争过的性能,只是这个性能如果可以运用到桌面端和游戏领域就好了我们总是说:由于Sun总是一个服务器端公司的原因,Java在桌面端一直没有真正的机会。而Oracle的收购让这种境况看起来不会有什么改变。希望这不要再继续下去,为了Sun、Oracle和Java自身的利益,Oracle内部的知名人士应该提醒公司来让他们知道:如果缺乏了在桌面端的能力和效率,必将影响Java的普及率甚至它在服务器端的占有率。我们一直以来习惯着Sun主要提供服务器端服务,因而想象着未来更多的处理能力还是出现在服务器端,而客户端不过是连接服务器的简单服务。这种情况已被证明是绝对错误的。因为未来的桌面应用将服务、应用与硬件所有的运算能力相结合,大量的数据和解码、声音、图像、视频被开发者处理,而且用并行编程的方式来实现,既保证了丰富的性能又保证了速度。对开发者来说,未来的服务既需要他们在客户端处理也需要在服务器端处理:执行复杂的搜索、图像、视频以及虚拟3D环境需要服务器端的技术,而远程服务如医学分析、远程教育和远程会议等则需要客户端能力。只是令我们感到失望的是历史又一次地重复了,因为至今Java中还没有什么大的动作。Armin Ehrenreich 在回复中说道:说的好,我完全认同。确实迫切需要跨平台的桌面应用技术,而且我不认为C++结合Qt是个好的选择。你说阐述的问题之所以没有引起很多的共鸣,我想是文化上的问题。许多Java社区的人们包括Sun内部的负责人无法理解你所说的,所以我断言Oracle也不会对Java做出什么大的改变。客户端现在基本上被微软和Apple包揽。到Cocoa论坛中会发现他们谈论的是GUI的可用性、响应性、终端户如何处理桌面应用等而我们的论坛呢,大部分人认为应用的未来在服务器端。这就是文化上的差异。但是桌面技术需要做很多工作,Swing很慢很慢地进化,连同Netbeans平台、Java3D, JOGL等应用勉强成为了桌面端的一个选择。但Sun置此境遇于不顾,只是模仿Flash发布了一款新的脚本语言,但是那些API只有使用JavaFX才可用Jeff Martin回复道:正确的观点,但我有一点不同。Sun真正的问题是他应该吃自己的饭,用自己的力量来用Java写一些实在的桌面应用,这可以证明他们关于Java在桌面端的承诺,证明他们可以写出应用、提升框架和工具。我不认为另一个框架会帮助Java。James Sugrue回复道:我同意作者观点,我也很支持桌面端开发。看看现在处于开发中的Eclipse. e4中的一些项目,它们为桌面和浏览器提供了一个解决方案,所以我想还是有一些希望的。但我认为我们不需要过分聚焦于桌面端,JavaFX是正确方向上的一个迈进,只是无法在Swing和Java3D/JOGL中看到应用提升。Osvaldo Doederlein回复道:我认为JOGL的支持没有那么糟糕,毕竟它是JavaFX Desktop Runtime的一个依赖。实际上,我们可以写一个非JavaFX的小程序,而且不需要请求本地代码的许可性就可以配置。
Desktop Java不能广泛流行的最主要原因是,跨平台的GUI方案已经有Web了。假如没有Web,大多数Enterprise Application会采用Desktop Java开发的
Java编写小型的桌面程序还可以,编写大型的企业级应用程序是不太现实的,你不会发现哪个ERP系统是用Java写的。 至于原因,楼上的也说了很多,其实要看你的应用程序的侧重点,如果更侧重于跨平台,java可能是个很好的选择,如果更强调速度更快,那C/C++可能就是比较好的选择,如果侧重于快速开发,.NET平台也是一个选择。
@钟声 的答案比较全面了。不过从 @陈昊 的并非回答的回答说开:很多学JAVA的人一开始学都听过这句。。于是SE就只被人当作基础过渡算了。。结果JAVA程序员很大部分都聚拢在EE 关注了 希望得到更多更全面的答案那么,很多人一开始听过这句是谁说的?为什么 SE 过渡之后的终极是 EE?答案是:说这话的人正是 Sun。Java 本来是作为 Web 上的 rich-client 设计的,Applet 在浏览器上失败之后,搞基于 ActiveX 的 Applet plug-in,再失败之后搞 Web Start,再失败之后,Sun 祭出 EE,宣称 GUI 它不玩了,宣称 Java 是最好的 server-side 语言。有人说这是个「见仁见智」的问题。问题就是 Sun 这位贱人是什么仁什么智啊。
因为桌面程序运行在宿主机器上,所以比如你运行java桌面程序,必然要安装java虚拟机,也就是相当于在操作系统上再加一层抽象,这与直接调用api的桌面程序效率相比,或多或少低一点。因为java主要用于因特网编程和移动开发,如jsp,而这些代码是运行在服务器端的,客户端(浏览器)只需要接收html代码即可,不需要安装java虚拟机,又因为java的跨平台性,语言又比较简单,还有就是背后有oracle这样的大公司支撑,其出身简直就是高富帅,堪称贵族语言。所以java的用武之地太多了,而桌面应用方面,由于微软的垄断,所以java显得有点不太出众,又加之在其他方面做的太好,把人的注意力都吸引了,所以造成了人们感觉java不适合的假象,其实如果你执意要用java开发桌面应用的,我感觉完全没有问题。
已有帐号?
无法登录?
社交帐号登录客服电话:3
请输入您的邮箱地址
输入您的密码
大写状态已打开
管理员账号
大写状态已打开
大写状态已打开
忘记管理员密码?
邮箱/手机号码
输入您的密码
忘记用户密码?
输入您的账号
输入您的密码
忘记用户密码?
什么是263云通信
263为企业推出一体化的企业统一通信服务
 263云通信可在Mac\Windows\iOS\Android等电脑、手机端同步使用
263云通信为企业级客户提供一站式、全方位的企业通信协作服务解决方案
既可以满足商务个人或团队的办公通信协作需求,也可为企业提供高效管理及通信协作平台
从263云通信开始你的企业协同办公之旅
现代人士不可或缺的基础商务工具
中国最资深的邮箱运营商
中国最高级别数据安全性
中国最专业的反垃圾技术
中国最专业的邮箱用户服务能力
邮箱容量:12G
超大附件:2G
邮箱域名:263.net
赠送:即时通信+企业网盘500M
月付:10元/月 · 年付:1年 100元 2年 200元
邮箱容量:263G
超大附件:2G
邮箱域名:支持企业自有域名
赠送:即时通信+企业网盘5G+免费注册域名
年付:200元/用户/年(5用户起售)
邮箱容量:支持个性化定制解决方案
超大附件:2G
邮箱域名:支持企业自有域名
赠送:即时通信+企业网盘20G+免费注册域名
年付:300元/用户/年(5用户起售)
安全可靠:
多种安全方式,确保数据万无一失
极速传输:
独有局域网加速技术,更方便更快捷
便捷易用:
产品界面人性化设计,简单易懂,使用更轻松
经济省钱:
降低企业运营成本 让中小企业更省钱
支持500M网盘空间
现在点击下方“免费使用”按钮,注册并安装云通信客户端即可免费拥有500M网盘空间。
支持文件协作
支持成员、群组等管理功能
支持多终端文件同步
容量/登录/日志统计
高效:提升企业沟通效率、降低成本
管理:科学易用的管理平台
安全:企业信息的守护卫士
移动:随时随地轻松办公
免费注册云通信,立即使用
支持信息收发、语音通信、图片消息等
支持消息云端同步
7*24小时人工客服
支持企业公告
支持企业通信录
单个企业,最大可以支持5万用户同时在线
支持多域管理、多域绑定,多级部门,多部门归属
7*24小时人工客服,并提供专属VIP客户服务
简单易用:
随时随地,一键开会
全程服务:
7*24小时中英文在线客服
安全可靠:
随时随地,多重技术及机制保障会议安全。
可视化界面、帐号费用尽在掌握。
语音清晰:
全球最先进的PSTN电话会议交换设备,专线传输,32ms的回音抑制能力及噪音消除技术。
支持云通信终端
单场会议支持20方
通讯录一键勾选外呼
国内:0.2元/分钟/方
国外:参见""
支持呼入、呼出
单场会议支持300方
支持固定、动态密码
专属电话会议监控系统
大方数会议
支持全程人工服务
单场会议支持3000方
支持固定、一次性密码
专属大方数会议操作系统
支持动态密码
支持主叫白名单
专属畅听会议监控平台
支持听会空间,用户可自行定制
会后录音回放页面
自建IDC数据中心、安全可靠
语音清晰、沟通流畅
清晰的视频效果
数据共享,实时互动
支持动态会议密码
支持263云通信客户端
支持文档共享,图片共享
数据会议单个会议支持50方
支持4路视频
支持VOIP/PSTN融合语音
网络会议单个会议室支持100方
支持白板、文档共享、桌面共享、程序共享、多媒体共享、文字消息
并发量:支持10万人同时并发在线,稳定性超过99.99%
实时性:实时的音视频交流;支持在线问答、暖场、插播、广告投放;多机位同时直播
便捷性:即播即录,即时生成点播;客户端无需下载插件,一键参会,1分钟即刻开启互动直播
互动性:支持电脑桌面操作;支持音视频交流;支持文档共享、数据协助;支持点名、投票、问卷等。
【263网络直播】展视互动是263企业通信下属业务单元之一,展视互动的互动直播产品,是全球领先的集互动直播、点播、课件制作、数据分析四位于一体的专属服务工具,为用户提供运营商级的互动视频云服务。目前主要应用于:网络培训、在线教育、企业网络直播等。
无论您身处哪个行业,我们都能满足您的需求
为什么使用263云通信
走进263云通信
这样的办公体验你想要吗
263用户大会之云通信战略发布
263用户大会之行业技术展望
7*24小时服务热线
| Copyright(C) 北京二六三企业通信有限公司
已通过ISO 20000 和 ISO 27001 认证
京ICP备号-3 京公网安备01import java.awt.*;
import java.awt.event.ActionL
import java.awt.event.WindowA
import java.awt.event.WindowE
import java.awt.event.ActionE
import java.io.*;
import javax.swing.*;
import java.awt.B
import java.awt.P
import java.lang.S
import javax.swing.JOptionP
public class QQ extends Frame implements ActionListener{
Label Lname ,L //定义用户名和密码的标签
TextField T //定义用户名的文本框
JPasswordField T //定义密码的文本框。注:使用JPasswordField的好处就是输入的密码是以****显示给用户的
Panel panel1=new Panel(); //定义面板
Button Load, //定义登陆和注册的按钮
boolean b=
File file1;
//定义记录用户注册的用户名和密码的文件夹
String []Usersname=new String[1024]; //定义记录用户名的数组
String []Userspassword=new String[1024];//定义记录密码的数组
public QQ(){
Lname=new Label (&用户名&);Lname.setBackground(Color.red);//设置标签的背景颜色
Lpassword=new Label (&密码&);Lpassword.setBackground(Color.red);//设置标签的背景颜色
Tname=new TextField (10);
Tpassword=new JPasswordField (10);
Load=new Button(&登陆&);Load.setBackground(Color.lightGray);
login=new Button(&注册&);login.setBackground(Color.lightGray);
add(panel1,BorderLayout.CENTER);
setLayout(new CardLayout(3,2));
panel1.add(Lname);
panel1.add(Tname);
panel1.add(Lpassword);
panel1.add(Tpassword);
panel1.add(Load);Load.addActionListener(this);
panel1.add(login);login.addActionListener(this);
public void actionPerformed(ActionEvent e){
// 用户登录事件处理
if (e.getSource() == Load) {
String name1 = Tname.getText();
String password1 = Tpassword.getText();
boolean flag =
int index = 0;
for (int i = 0; i & Usersname. i++) {
if (name1.equals(Usersname[i])) {
if (flag && password1.equals(Userspassword[index])) {
//处理用户登录成功后的反馈信息
JOptionPane.showMessageDialog(null, &恭喜您登陆成功!&, &消息&, RMATION_MESSAGE);
JOptionPane.showMessageDialog(null, &对不起您的用户名或密码错误!&, &错误&,JOptionPane.ERROR_MESSAGE);
// 用户注册模块的事件处理
if (e.getSource() == login) {
String NCmp = Tname.getText();
String PCmp = Tpassword.getText();
boolean flag =
for (int i = 0; i & Usersname. i++) {
if (NCmp.equals(Usersname[i])) {
if (flag) {
JOptionPane.showMessageDialog(null, &对不起您的用户名已经注册!&, &错误&, JOptionPane.ERROR_MESSAGE);
int index = 0;
JOptionPane.showMessageDialog(null, &注册成功!&, &消息&, RMATION_MESSAGE);
for (int i = 0; i & Usersname. i++) {
if (Usersname[i] == null) {
Usersname[i] = NC
Userspassword[index] = PC
file1=new File(&Student.dat&);
FileWriter fw=new FileWriter(file1,true);
fw.write(&用户名&+&\t\t&+&密码&+&\n&);
fw.write(NCmp+&\t\t&+PCmp+&\n&);
fw.close();
}catch (IOException e1){
e1.printStackTrace();
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame Fstudent=new QQ();
Fstudent.setSize(200,200);
Fstudent.setTitle(&QQ&);
Fstudent.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
Fstudent.setVisible(true);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2468次
排名:千里之外
原创:25篇
(2)(5)(16)(4)11.11大促流量暴涨,销量翻倍的方法
用 java 编一个类似QQ的聊天工具
有相似问题想解决?专业顾问来帮助您
发布需求, 托管赏金
匹配服务商
已退款、交易失败
已投标服务商
综合评分:5颗星
速度:5.00
服务:5.00
态度:5.00
好评率:100%
共有10个服务商参与报价,查看更多服务商报价
参与报价,开始赚钱
提交你的报价和方案
中标后交付作品
获得任务赏金
极速:10分钟急速响应
高品质:精选服务商提供服务
放心:不满意可退款
企业管理系统
软件1天速成
CRM客户管理开发
OA办公系统开发
交易成功的需求
其它工具软件相关需求

我要回帖

更多关于 界面设计 类似vs2010 的文章

 

随机推荐