最近想做一个客户端软件,不过以前一直做的WEB应用.
不知道swing/swt比较,用哪一个好一点
另外考虑使用eclipse rcp来做.
我对rcp的理解是:rcp是基于swt/jface基础的一个已经搭好的框架或平台,大量eclipse IDE所用到的组件都可以直接使用,只需关注业务就可以了.
哪位兄弟可以帮忙介绍一下这几个的概念,比较它们的优劣.
另外一个问题,好象记得swing里面有一个frame和dialog的概念
对于rcp,它的viewpart概念还不大熟悉,什么时候采用viewpart,什么时候
使用editor,然后什么时候采用dialog,它们之间的关系怎么样.
另外,使用rcp,那么做出来的gui风格,估计和eclipse一样,比如一个view视图
的显示.是否可以定义其它风格.
找了一些例子,感觉都很业余,考虑怎么能够做得更专业一点点,最近看到一个词语,好象叫做商业品质吧问题有点乱,也不一定对,麻烦大家看看,主要想知道一个客户端软件是怎么做的

解决方案 »

  1.   

    如果你的程序对界面没有特殊要求,最好用swing
    swing是jdk自带界面组建,客户不需要另外下载jar包。而且基本功能都可以实现。胖客户端主要是把业务处理放到客户端来进行,减轻server压力。但还是要考虑程序本身大小的,需要用户另外下载的东西还是少用的好。
      

  2.   

    谢谢,希望多一点兄弟回答,看见一个叫rehte的,到是有不少分析,
    不过总是站在netbeans立场上说话,难免有马甲之嫌(参看http://blog.sina.com.cn/u/1264601020#feeds_FEEDS_1264601020),
    多几个人的意见,多讨论一点我想总是不错的,我刚就下载了netbeans看看
      

  3.   

    当然是哪个比较熟用哪个了
    对于ide我个人感觉 
    用的顺手自己喜欢的就是最好的
    没必要赶时髦
      

  4.   

    顶楼上,awt用得好的,甚至做的比对你说的那些懂个半调子的要好得多
      

  5.   

    推荐使用SWING,新版的JDK中SWING功能已经很好了
      

  6.   

    oldersky:
    我个人喜欢,就像喜欢eclipse的人写eclipse的文章。如果你有喜欢eclipse或者swt,并且写出你的理由,我也喜欢看啊,大家进行辩论才能知到优劣嘛。我以后还会对SWT的结构和实现进行深入分析,并把两者只做技术上的对比分析,尽量避免市场、政治、宗教、情绪等非理性的东西。欢迎大家可以常过来看看,你有反对意见我很欢迎,我们也可以进行讨论。
      

  7.   

    to rehte()
    说实话 你的文章写的挺不错的
      

  8.   

    最近也有在改把远程的放到客户端的事情.放在客户端固然方便,但是当你修改时,客户端也要跟着变.将那些固定不变的放在客户端还是可取的
    SWING做出来的东西的却不错
      

  9.   

    to rehte():
    呵呵,实在是对不起了,原本只是想多能看到一些有深度一点的文章,各方面的.
    我对swing和swt都不是很了解的.
    其实我一直都在认真看你写的,希望你不要介意,另外真的感谢你的文章,希望能够为我们贡献更多的吧,也许我们每个人都应该努力写一点有用的东西,只是现在遗憾自己可能还达不到这个水平吧
      

  10.   

    用的顺手自己喜欢的就是最好的
    没必要赶时髦
    ============================
    典型的封建思想,如果你当决策者,鬼都要饿死。
    汇编用得好的人肯定还得学习学习C,C++,
    awt用得好的人怎么可能不学习Swing,
    否则Sun公司还混个屁
      

  11.   

    我的意思是楼主对swing和swt哪个比较熟就用哪个
    你不封建 你牛 你能把所有的新技术都学个遍?
    cd
      

  12.   

    Swing写的东西个人认为只能用在局域网中,Web网用起来很不方便,虽然Java自称Applet使用只需下载JRE,可是几个没事干的网民愿意下载后安装?而且从Applet中导出或导入数据(包括图形)极其不方便。当然胖客户端影响网速更不必说,其实如果Java装载机制考虑C/S结构可能更好,不用每次起来网页就从服务器端下载。
      

  13.   

    swing 会用的话在什么地方都不错
    看看这里http://community.csdn.net/Expert/topic/5291/5291651.xml?temp=.3623163我参与使用swing开发的医疗系统,全部是web下面的applet还是在3年前现在swing的效率更好为什么不发扬那个人观点
      

  14.   

    SWING和WEB应用什么关系....
    有谁拿SWING来写WEB的举手....SWING和SWT你习惯那个就用那个,就这么简单,去比较有什么区别完全没必要
      

  15.   

    to shendl(良少) 
    你说一个更懂的让我听听?
      

  16.   

    我们现在还在用Swing开发Web程序,主要开发电力方面与银行方面的业务,弄了接近五年了,始终觉得远程访问速度不够,不过还算能忍受。
      

  17.   

    楼上的升级JDK,映射数据库
    把现在的WEB框架都用上
    界面换成SWING那就是大碗
    绝对牛
      

  18.   

    shengli_liao:
    你可能始终没有熟悉java网络编程,其实使用swing做前台传输的数据要比web传输的数据少的多,想一想swing传递是纯数据,而web传输的是数据的HTML展现,数据量大了不止多少倍。你之所以觉得慢,肯定是你们没有正确使用java的网络编程。web让人觉得不慢,关键一点是它不断更新前台展现,不是直到所有数据都来了才突然渲染的。许多人在使用java网络编程和Swing编程时常犯一些简单的错误使得swing+http通信看起来很慢,这包括许多老手,甚至多年经验的人。
    我以前在一家公司(我不提名了),他们就做银行方面的业务,他们使用Swing做,但是由于他们基础平台在网络通信上存在严重缺陷,使得swing+http的速度在局域都很慢,更不用说internet,而这个基础平台都是些至少有五年以上的Java牛人做的,其实稍微想想,你就会奇怪,传输少的多数据,为甚么java/http反而要比Web Browser慢,原因很简单,developer不行。
    其实java做这种internet的应用的客户端唯一的缺陷就是部署,或者说客户端插件的安装等问题。如果不存在这些问题,这种java swing+http的做法是最好的选择。
      

  19.   

    其实java做这种internet的应用的客户端唯一的缺陷就是部署,或者说客户端插件的安装等问题
    ===============================
    这不就是c/s与b/s的区别了吗,我想如果Sun公司将Applet的装载过程搞成如c/s模式的话,速度肯定要大幅提高,再则Swing与Servlet之间的通信可能比普通网页传输慢得多。具体细节我没仔细考虑过,但是速度我是测试过的。
      

  20.   

    shengli_liao:
    关于部署问题将是JDK 7和以后版本重点解决的问题,部署问题不单单设计技术问题,包括商业授权(Licenese),公司市场策略,公司之间的竞争等等,可以说Java开源为部署问题的解决打开了至关重要的大门。
    Swing与Servlet之间的通信我知道怎么回事,很早以前我就怀疑为什么,后来知道关键所在,还是程序员的问题。
    Swing与Servlet之间的通信也是采用http协议,浏览器与Servlet也是采用http协议,浏览器和Servlet之间往往要传递多得多得数据,原始数据被以HTML网页得形式展现,这个数据量大了不止一倍,最低层通信协议还是操作系统的TCP/IP等协议栈完成的,唯一点不同就是展现,所以还是程序员得问题,从这儿着想很容易就明白了问题的关键。
      

  21.   

    to  shengli_liao(我是谁?)     关于Web开发和Swing开发,Socket,你啥都不懂,我跟你有什么好说什么呢?
    Applet的JRE下载后需要手工安装吗? 哪台电脑没有JRE?哪个浏览器没有JRE?
        
       JavaWebStart不行吗?还需要Applet吗?
       
      

  22.   

    第一次见到拿Swing和web比较,风马牛不相及Swing只是界面组建而已,你不用它,用swt或者awt一样可以
    applet是cs的一种形式,web start也可以,application是最原始的CS组成部分用CS还是BS,主要问题在于客户端处理能力的不同和通信方式不同。CS理论上可以处理任何tusk,而BS是有限制的。CS可以采用任何方式通信,如Tcp、udp、http、ftp等,而BS只能基于http来做通信,所以再一味的讲cs好还是bs好是没有意义的。看了几个人的回帖,觉得确实是不懂呀,要知道tcp的特性http是代替不了的,所以很多地方不是用哪个好,而是必须用哪个。至于说CS比BS的速度慢的,我很诧异,千万别说那个CS通信是你写的。
      

  23.   

    BTW:
    其实sun做的最失败的就是没有把Applet和web start整合
    WebStart不可以显示在页面里面,而applet每次都需要下载
    对于嵌入web的applet太需要web start的版本检测和启动机制了。
      

  24.   

    你说的C/S可以使用任何通信方式是指在内部网(NAT)环境下,没有代理和防火墙的情况下。我们讨论的是介于B/S模式和internet架构上异质环境下的Swing/Application+Web Container+EIS模式,这种情况下显然只能用http之类越过代理和防火墙之类的应用层协议,而不是传输层协议。http协议是应用层协议、TCP/UDP是传输层协议,俺懂。
      

  25.   

    to  shengli_liao(我是谁?)     关于Web开发和Swing开发,Socket,你啥都不懂,我跟你有什么好说什么呢?
    Applet的JRE下载后需要手工安装吗? 哪台电脑没有JRE?哪个浏览器没有JRE?
        
       JavaWebStart不行吗?还需要Applet吗?
    ======================================
    本来我不想说的,纯粹**
    Windows XP 下哪有JRE
    你当微软和你一样SB
      

  26.   

    to rehte():
      别和他们说了,和那些研究领域与研究性质都没搞明白的人,争起来有个鸟用?
      虽然我们裤衩不多,我只佩服你。
      

  27.   

    to rehte() 你是说我刚才的话吗?
    http的底层是什么?http可以,tcp当然可以了
    这里根本没有什么proxy或者firewall的问题
    应用层协议可以,传输层的怎么可能不可以呢。http协议就是去取,如果cs用这样的协议来通信,那么server实际上是无法和client做到实时通信的。tcp和udp可以,因为他们可以反向push数据。(当然,这些都是废话了,这里的人应该都用过)
      

  28.   

    fool_leave:
    我服了你了,还是好好看看网络编程的书吧:)
      

  29.   

    to shengli_liao
    这里面确实有经验的问题
    你做到项目多了也就能体会到了如果只是做一个bbs的东西,那bs方便,而且实惠,但如果你做的是数据发布系统,要求服务端的数据变化了,客户立刻能够看到.这样的东西往往需要时差在100ms级别,http协议不可以,只能用tcp了,那样也只可以用cs来处理当然,如果你还需要对数据做处理,如图形显示\计算等,bs的功能也不够,还需要cs.(也可以把这些处理放到Server上做,采用瘦客户端,但很不实用,server压力会很大,影响性能).所以采用CS\BS方式很多情况下不是哪个好,哪个不好,而是业务需求造成的.即便再支持CS的用户,也不会把网页搬到app里面去显示.
    真正引起争论的是采用胖客户端还是瘦客户端,是把数据加工放到客户端去做,只传输原始数据;还是把加工后的数据传给用户,客户端只显示结果.两种都有优点,不过现在的机器越来越好,网速也越来越高,胖客户端占的比例也越来越高了
      

  30.   

    to rehte() 我做网络工作已经好多年了,你说的协议我都用过不要这么不屑一顾.你说说什么协议会存在你说的问题?我一个一个的给你解答
      

  31.   

    fool_leave:
    不好意思,我是服了你啊,第二句的意思是俺仔细回去学学网络编程啊。
      

  32.   

    :)我最早用udp代替tcp的时候也有你的感觉,觉得udp特烦,只要客户端在proxy后面就无法接收信息。后来采用p2p把proxy打了一个洞就ok了tcp实际上不存在这样的问题,如果你的客户端在firewall后,让它开个端口就ok了,或者让server的socket绑定80端口,把iis的端口封掉,一样可以用(一般的firewall都是只开通80的tcp端口的)
    good luck
      

  33.   

    我和shengli_liao讨论的是比如我在我们公司内部使用代理,访问你的网站,你的网站上有一个applet程序或者java web start程序,我使用这个applet维护一些数据,applet将这些数据存到你的服务器上,你不会说是直接使用tcp协议吧。原理上可以,先用tcp连接代理服务器,然后使用http协议同代理服务器对话,然后获取代理服务器的输入流,然后解析响应,其实这就是HttpURLConnection底层的实现,何必这么复杂,为啥不直接使用http协议呢?自己在re-invent the wheel呢?
      

  34.   

    也就说整个过程就是简单的:
    URL url=new URL("http://host.com/service?p=...");
    HttpURLConnection conneciton=url.getConnection();
    //然后使用这个连接访问服务就行了
    ...
    connection.disconnect();
    这个过程是可以穿透防火墙和代理的。
    使用tcp当然也可以,但是你实现底层通信的过程其实是重复了java.net.HttpURLConnection为你所做的事情。
      

  35.   

    等等,我觉得从头到尾就理解错了一点Server!=HttpServletCS这里的S不是说一个HttpServlet,而是一个服务。如果采用BS构架,那么这个server应该提供http请求接口doGet或doPost
    但如果是CS构架,S的设计者应该提供的是一个Tcp or UDP服务,而不是HttpServlet,这样客户端和服务端可以通过Tcp、udp交互
      

  36.   

    你写ServerSocket的服务器方实际上是简单模拟了一个Web Server,你在客户端必须同一定的代理先tcp connect,然后这个代理再和你的服务器tcp connect,然后客户端同代理发送的数据必须是代理能理解的应用层协议,这个协议最常见的就是http协议,各种代理基本都支持这种协议。然后代理再同你的服务器端连接通信,这个过程也是使用http协议。其实这就是web browser-web proxy-web server工作的原理啊,你与其实现了这个协议,为啥不直接使用http协议呢?
    当然你也可能使用Sock 5之类的代理,但是除了http协议没有其他协议是通用的代理支持的协议,因此,一般都是使用http协议,这个协议是缺省被所有代理支持的。
      

  37.   

    再往下说就更乱了
    你们都玩cs或者魔兽吧,那是CS结构的游戏,干嘛要模拟http呢?他们的通信本来就建立在tcp上的
    如果用applet做个ClientStrike,或者把它做成ActiveX放到网页上,不就成了我说的东西了吗。干嘛非要用http呢?
      

  38.   

    C/S结构和网络通信协议是没有必然联系的,只不过是C/S结构一般应用于NAT网络,所以C/S更直接常用Socket编程,而B/S更多应用于internet异质环境,比如代理等,所以更常使用http协议。我们现在是讨论一种新方案,这种方案与其说是C/S,不如说是B/S的一种变体,一种前端是Swing界面的B/S程序的变体罢了,在内部网玩CS和魔兽的话必须适配一定的代理,这个代理一般来说就是web proxy,当然不排除Sock v5 proxy(如果你公司网络支持的,这点和qq是类似的),但是如果你配的是web proxy,它们内部的实现肯定使用的是http协议。这一点毫无置疑,除非它非要自己重写http client和http server(web server),一般肯定都是直接使用平台提供的http协议类库。
      

  39.   

    to fool_leave(请及时结贴):
    其实我们做项目时确实发现许多问题,因为我们不是专门的计算机专业,要不我们专门开一个帖子,好好讨论这类问题,同时希望有机会合作。
      

  40.   

    to shengli_liao(我是谁?) 
    不要提什么计算机专业,那本本只能用来喂耗子
    你有什么问题单开帖子问吧.net\IO里面的内容多着呢