转贴:Rich Client 教程 第一部分

转贴来源:http://www.benisoft.com/cn/java/RichClientPlatformTutorial_1_zh.htm

Rich Client 教程 第一部分

Rich Client Platform (RCP)是一种全新的建立Java应用的方式,它完全不逊色于任何为专门平台开发的应用。本教程帮助你快速建立一个RCP应用,并被更新以适用于Eclipse 3.1。

作者 Ed Burnette, SAS
2004年7月28日(2005年7月更新适用Eclipse 3.1)

译者 Cliff Liang
2005年8月


简介

尝试一下:将Eclipse给你那些以前从来没有接触过Eclipse的朋友或同事看,并让他们猜猜看Eclipse是用什么语言写的。他们有可能猜是VB,C++,或C#,因为这些语言被广泛用于开发高质量的客户端应用。当你告诉他们Eclipse是由Java语言开发的时候,看看他们会有什么样的表情, 尤其是他们自己就是Java程序员的话 。

由于Eclipse独特的开放源码许可证,你可以使用Eclipse技术来创建你自己的商业质量的程序。在Eclipse 3.0以前,这也是可能的,但有点困难,尤其是你需要高度定制菜单,布局,和其他用户界面元素的时候。这是因为Eclipse完全是按照IDE的标准设计的。Eclipse 3.0引出了Rich Client Platform(RCP),它基本上重构了Eclipse用户界面的基础部分,使得它可以用于非IDE应用。Eclipse 3.1为RCP提供了新的功能,最重要的是,提供新的支持使工具创建更容易。

如果你想停一下,看看第一部分的代码,你可以在这里下载它们。接下来,我们来看看如何创建一个RCP应用。

开始

RCP应用给予Eclipse plug-in架构,(如果你不熟悉,可以查看参考部分的内容)。因此,你需要为你的主程序建立一个plug-in。Eclipse的plug-in开发环境Plug-in Development Environment(PDE)为开发过程提供了大量的向导对话框和编辑器。选择File > New > Project > Plug-in Development > Plug-in Project,就会显示plug-in项目的向导对话框。在后面的页面中,输入项目名,比如org.eclipse.ui.tutorials.rcp.part1,选择Create a Java project,选择你所针对的Eclipse版本,并选择Create an OSGI bundle manifest for the plug-in。然后点击Next

Note: 如果你使用Eclipse 3.1,你最好选择Create an OSGI bundle manifest for the plug-in。和以前的版本相比,现在这个选项缺省是被选中的。

在向导的下一个页面中,你可以修改plug-in的ID和其他参数。一个重要的问题是,“Would you like to create a rich client application?”。选择Yes。创建一个plug-in所代表的类是可选的,但是对于这个例子,其他选项都可以使用缺省值。选择Next继续。

在Eclipse 3.1中,提供了许多创建RCP应用的模版。这里我们使用最简单的模版。选择Create a plug-in using one of the templates,然后选择Hello RCP模版,这相当于是RCP的“Hello,World”。点击Finish生成项目。Eclipse会打开plug-in的Plug-in Manifest Editor。这个编辑框可以编辑配置来控制你的RCP应用。

Note: 如果你看到一个对话框询问你是否切换到Plug-in Development透视图,你可以点击Remember my decision,并选择Yes

运行一下看看

尝试RCP应用在以往是有点乏味的。你必须创建一个运行配置,提供正确的应用名,并且还有找到所有需要的plug-in。幸运的是,现在PDE可以处理所有的这些。你所要做的仅仅是在Plug-in Manifest编辑器的Overview页中点击Launch an Eclipse Application。你就能看到启动了一个基本的Workbench。(图 1)

图 1. 最简单的RCP应用

创建一个Feature

在Eclipse里,feature是plug-in的集合。Feature是可选的,但是Eclipse推荐你使用feature,这是因为如果你需要通过Eclipse的自动更新管理器来安装、更新你的应用,或者使用JNLP导出应用,feature就能帮助你做到这些。要创建feature,选择File > New > Project > Plug-in Development > Feature Project。一般feature的名字是你的plug-in项目名加上“-feature”,所以我们这里创建的feature就叫org.eclipse.ui.tutorials.rcp.part1-feature。点击Next来到Feature Properties页面,再点击Next,来到Referenced Plug-ins and Fragments 页面。选择org.eclipse.ui.tutorials.rcp.part1,点击Finish,这样feature项目就创建好了。

建立product

用Eclipse的话来说,product就是任何构成你的应用的东西,包括所有它所依赖的plug-in,运行应用的命令,以及使你的应用区别于其他应用的商标(图标等)。虽然你运行一个RCP应用并不需要定义product,但是这样做可以使得你应用脱离Eclipse运行变得更容易。这是Eclipse 3.1为RCP开发带来的重要改进。

许多复杂的RCP模版随着product一起提供,例如,“RCP Application with an Intro”和“RCP Mail”。更多的模版会在今后的版本中提供。Hello RCP这个模版没有定义成product,所以我们就为它建立一个product。

为了建立product,你首先为项目添加一个product定义文件。右键点击plug-in项目,选择New > Product Configuration。然后输入配置文件的文件名,比如part1.product。选择Use a launch configuration,和下拉列表中的Eclipse Application。(注意如果你在当前的workspace中有其他的plug-in项目,你有可能会看到一个不同的运行配置名。选取和你刚才运行的RCP plug-in相关的运行配置)然后点击Finish。这时会出现product配置编辑器。通过这个编辑器,你可以控制你的product中所需要的plug-in和商标。

Overview页面中,输入Product Name,比如RCP Tutorial 1。选择This project configuration is based on features。然后选择New...按钮创建一个新的product。输入product的Defining Plug-inorg.eclipse.ui.tutorials.rcp.part1。输入Product ID,比如product,Product Application选择org.eclipse.ui.tutorials.rcp.part1.application。点击Finish

Note: 在Eclipse 3.1中,如果你在输入Product Name前创建product,你会在Problems视图中看到错误。这个错误在你Synchronize后会消失。这是一个已知的bug,会在今后的版本中修复。

回到Product Configuration编辑器的Overview页面。点击product configuration链接或者选择Configuration页面,添加你的feature(org.eclipse.ui.tutorials.rcp.part1_feature)和RCP的feature(org.eclipse.rcp)。然后回到Overview页面,按 Ctrl+S或者File > Save保存。

这时,你应该测试你的product,确保它能正确运行。在Overview页面的Testing部分,点击Synchronize,然后点击Launch the product。如果运行正常,应用应该和刚才看到的结果一样。

在Eclipse外运行

所有这些都是为了能在用户对Java和Eclipse一无所知的情况下运行独立的应用。对于一个真实的应用,你可能提供由InstallShield这样的安装程序生成的可执行程序。这超出了本教程的范围,所以我们会用简单的方式来演示。

我们需要建立一个简单的Eclipse安装目录,这是因为Eclipse plug-in装载器希望所有的plug-in都在恰当的位置。这个目录必须包含可执行的Eclipse启动程序,配置文件和所有product需要的feature和plug-in。我们为此定义了足够的PDE信息。

Product Configuration编辑器(不是Plug-in Manifest编辑器)中,点击Eclipse product export wizard。修改根目录为RcpTutorial1。然后选择Export DestinationDirectory,并输入目录名,比如C:/Deploy。如果你正在建立一个开放源码的项目,你可以选择Include source code。最后点击Finish

现在,应用就可以在脱离Eclipse的情况下执行。当你完成后,你应该得到下面的目录结构:

    RcpTutorial1
    |    .eclipseproduct
    |    eclipse.exe
    |    startup.jar
    +--- configuration
    |    |    config.ini
    +--- plugins
    |    |    org.eclipse.core.commands_3.1.0.jar
    |    |    org.eclipse.core.expressions_3.1.0.jar
    |    |    org.eclipse.core.runtime_3.1.0.jar
    |    |    org.eclipse.help_3.1.0.jar
    |    |    org.eclipse.jface_3.1.0.jar
    |    |    org.eclipse.osgi_3.1.0.jar
    |    |    org.eclipse.rcp_3.1.0.jar
    |    |    org.eclipse.swt.win32.win32.x86_3.1.0.jar
    |    |    org.eclipse.swt_3.1.0.jar
    |    |    org.eclipse.ui.tutorials.rcp.part1_1.0.0.jar
    |    |    org.eclipse.ui.workbench_3.1.0.jar
    |    |    org.eclipse.ui_3.1.0.jar
    |    |    org.eclipse.update.configurator_3.1.0.jar
    +--- features
         +--- org.eclipse.ui.tutorials.rcp.part1_feature_1.0.0
         +--- org.eclipse.rcp_3.1.0

Note: 在Eclipse 3.1,推荐的plug-in格式是一个jar文件。这在部署应用的时候可以节省存储空间。

Tip: 本教程的以前版本使用批处理文件或shell脚本来启动你的RCP程序。 现在看来,这是一个不好的办法,因为你不能完全为你的应用定制商标信息。例如,你不能添加启动画面。所以务必使用Eclipse可执行的启动程序。

试试看吧!在Eclipse外执行可执行启动程序,看看它能不能工作。启动程序的名字(缺省是“Eclipse”)可以在product配置的时候在商标选择中设置。

问题解决

在我写本教程的早些版本中,我收到邮件说他们由于这样或那样的原因不能运行例子。许多的意见已经在新的PDE设计中有所改善,所以没必要将它们列在这里。因此我现在将这一节暂时留着空白。如果你在运行应用时有任何问题,请告诉我,我将加以解决一般其他人能看到。

兼容性和移植

如果你正在将一个Eclipse 2.1版本的plug-in移植为Eclipse 3.1版本,你需要参考在线文档中所提到的一些问题。如果你是移植Eclipse 3.0版本的plug-in,那问题会少很多。更多的信息可参阅参考部分。

Tip: 建议:当心不要使plug-in.xml和MANIFEST.MF的内容有所重复。一般不会这样,除非你将一个不使用MANIFEST.MF的老plug-in转换成使用MANIFEST.MF的,而且是手工编辑这些文件二没有借助于PDE。

结尾

在本教程的第一部分,我们看到建立一个Rich Client的简单应用需要哪些必要的步骤。下一部分将深入介绍那些由向导建立的类,比如WorkbenchAdvisor。所有的例子代码可以在这里找到。

参考

RCP Tutorial Part 2
RCP Tutorial Part 3
Eclipse Rich Client Platform
RCP Browser example (project org.eclipse.ui.examples.rcp.browser)
PDE Does Plug-ins
How to Internationalize your Eclipse Plug-in
Notes on the Eclipse Plug-in Architecture
Plug-in Migration Guide: Migrating to 3.1 from 3.0
Plug-in Migration Guide: Migrating to 3.0 from 2.1

ref: bug 104146

IBM is trademark of International Business Machines Corporation in the United States, other countries, or both.

Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.

Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.

Other company, product, and service names may be trademarks or service marks of others.


 

BeniSoft 版权所有
电子邮件: info@benisoft.com

发现网上关于vbrichclient教程比较少,但这个实在是好东西,实用性,稳定性都比VB自带的winsock好的多,多客户端不用winsock控件数组。 也不用在各窗体上放winsock,直接在模块中就能实现收发 下面直接上代码,窗体和文本钮、按钮大家自行拖放。要用到VB自带隐藏函数varptr()取内存指针(VbMsdn中没有这个函数,实际上很简单^^)。 VbRichClient5.0.38中包含sqlite3.9支持 上面共享中也包含VbRichClient5.0.38支持库 VbRichClient代替winsock 主要使用 cTCPServer cTCPClient cUDP '--------------------------------------------------------------------- '服务器端,代码最简化,要实现多客户端只要用数组存hsocket就可以 Option Explicit Dim WithEvents sv As cTCPServer Dim WithEvents udp1 As cUDP Dim cHsocket& Private Sub Form_Load() Set sv = New cTCPServer sv.Listen sv.GetHost("127.0.0.1"), 35912 Debug.Print sv.GetHost("") Set udp1 = New cUDP udp1.Bind "127.0.0.1", 5616 End Sub Private Sub sv_DataArrival(ByVal hSocket As Long, ByVal BytesTotal As Long, ByVal FirstBufferAfterOverflow As Boolean) Dim d() As Byte, s$ ReDim d(BytesTotal - 1) sv.GetData hSocket, VarPtr(d(0)), BytesTotal '★★关键代码 s = d Text2.Text = Text2.Text & s & vbCrLf Debug.Print "收到:" & BytesTotal End Sub Private Sub sv_TCPAccepted(ByVal hSocket As Long) cHsocket = hSocket Text1.Text = Text1.Text & sv.GetPeerHostIPAndPort(hSocket) & vbCrLf End Sub Private Sub sv_TCPDisConnect(ByVal hSocket As Long) Text3.Text = Text3.Text & sv.GetPeerHostIPAndPort(hSocket) & vbCrLf End Sub Private Sub udp1_NewDatagram(ByVal BytesTotal As Long, ByVal FirstBufferAfterOverflow As Boolean) Dim d() As Byte, s$ ReDim d(BytesTotal - 1) udp1.GetData VarPtr(d(0)), BytesTotal s = d Text2.Text = Text2.Text & s & vbCrLf End Sub '------------------------------------------------------- '客户端 Option Explicit Dim WithEvents cl As cTCPClient Dim WithEvents udp1 As cUDP Dim cid& Private Sub Command1_Click() cid = cl.Connect("QgB1", 35912) End Sub Private Sub Command2_Click() cl.Disconnect cid End Sub Private Sub Command3_Click() Dim b() As Byte b = Text1.Text cl.SendData cid, VarPtr(b(0)), UBound(b) + 1 End Sub Private Sub Command4_Click() Dim d() As Byte, s$ s = "yessss" d = s udp1.RemoteIP = "127.0.0.1" udp1.RemotePort = 5616 u
说明: 1此程序由ecz00程序优化而来 地址 http://download.csdn.net/download/ecz00/9403630 因此程序可以说是网上唯一的tcpclient使用的中文案例,提供了我思路,在此感谢 ;为什么用这个插件,vb自带的插件winsock 这么有用的插件 居然不是微软自带的插件, 最要命的是 直接注册ocx控件 win7 win10上可能因为序列号无法注册,那么vb下如何开发ip客户端,变得很麻烦,尝试过APi方法的,但是过于复杂,程序量太大,比较麻烦,因此用 此方案比较可行,在原版的基础上花了5天时间摸索和优化, 此版本使用方法 1 把vbRichClient5.dll放进C:\Windows\SysWOW64 (64位系统) 2 在vb6中点击 工程->引用 把上面的dll引用进来就可以额,不需要注册 3:使用sscom5.12.1 或其他tcp调试软件软件启动tcpserver 地址是127,0,0,1 5676 4:直接运行本软件即可使用。点击连接,显示成功,说明连接成功,可以相互发送数据了 服务端的程序在原版上未做修改,请自行优化 此软件改进了原版 1:无法显示连接状态和错误信息 2:只能发送不能接收 3:使用主机名的连接方式,无法直接使用,一开始 4:无法显示byte值 5:界面修改 6:连接的时候,不断开以前的连接,造成重复连接 提示 vbRichClient5的手册找遍了都找不到,估计作者都没写,更别想有中文版了,所以只能 在vb6中点击视图-》对象窗口,可显示vbRichClient5.dll 所有的类和方法 QQ175891641 2018-2-15优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值