仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 441|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA网站制作之本人下手编写Eclipse扩大点

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊扩大(Extension)是Eclipse中一个关头的机制,plug-in使用扩大向Eclipse平台增加新功效。可是扩大不克不及随便地创立,必需依照扩大点(extensionpoint)界说的标准举行明白的声明,Eclipse才干认出这些扩大。我们不但可使用Eclipse供应的浩瀚现成的扩大点,并且还能够界说新的扩大点,并在该扩大点长进行扩大。
固然,扩大点的界说对照庞大。不外Eclipse为用户供应了图形化的编纂界面,我们只需输出一些信息,Eclipse就会主动天生代码,使扩大点的界说变得十分复杂。
上面我们就来看看怎样在Eclipse中创立一个新的扩大点,并在这个扩大点长进行扩大。
我们必要做以下的事情:
1.计划该扩大点
2.界说扩大点,即编写扩大点的清单文件
3.编写代码来载进该扩大点的扩大
我们以创立workList扩大点为例,举行具体先容。
worklist完成的功效是:创立一个view,在个中以树状显现体系中可用的功效模块,经由过程双击某个模块节点,实行该扩大界说的办法(method)。实在相称于一个把持台,经由过程把持台来运转分歧的功效。
因为Eclipse是由一个运转时中心(runtimecore)和浩瀚插件构成的,我们也将workList扩大点界说在一个插件中,有关workList的代码文件也放在这个插件中,如许便于查找和修正,也不影响Eclipse自己的代码。

1.界说扩大点
起首我们要创立一个寄存新扩大点信息的插件net.softapp.worklist,这个插件对org.eclipse.ui.views举行扩大,以下是插件的plugin.xml文件在views扩大点的信息:
<extension
point="org.eclipse.ui.views">
<category
name="WorkListCategory"
id="WorkListCategory"/>
<view
icon="icons/sample.gif"
class="net.softapp.internal.worklist.WorkListView"
category="WorkListCategory"
name="WorkList视图"
id="net.softapp.internal.worklist.WorkListView"/>
</extension>
如许就能够经由过程“window->showview->other”,在弹出的“Showview”对话框当选择“WorkList视图”,翻开视图,我们用这个视图显现workList扩大点的一切扩大信息。“ShowView”对话框显现了Eclipse中界说一切视图,即一切org.eclipse.views扩大点的扩大。懂得这一点很主要,由于我们在编写workList扩大点代码时,就能够仿照乃至拷贝views扩大点的代码。
上面,我们要在net.softapp.worklist插件中界说workList扩大点。
扩大点的界说文件依照Eclipse的寄存体例,一样平常寄存在schema目次下,我们把文件定名为worklist.exsd。内容以下,此内容由PDE天生:
<?xmlversion=1.0encoding=UTF-8?>
<!--SchemafilewrittenbyPDE-->
<schematargetNamespace="mtn.esip.worklist">
<annotation>
<appInfo>
<meta.schemaplugin="net.softapp.worklist"id="workList"name="workList"/>
<!--经由过程这个界说,我们能够看出,界说的扩大点的id是net.softapp.worklist.workList,今后援用时要注重,同时注重巨细写-->
</appInfo>
<documentation>
[Enterdescriptionofthisextensionpoint.]
</documentation>
</annotation>

<elementname="extension">
<complexType>
<choiceminOccurs="0"maxOccurs="unbounded">
<elementref="category"minOccurs="0"maxOccurs="1"/>
<elementref="worklist"minOccurs="0"maxOccurs="1"/>
</choice>
<attributename="point"type="string"use="required"><!--界说point-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="id"type="string"><!--界说id-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="name"type="string"><!--界说name-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>

<!--界说category-->
<elementname="category">
<complexType>
<attributename="name"type="string"><!--界说category/name-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="id"type="string"><!--界说category/id。援用category时,必需指出使用的id,而name给出了一个可供显现的直不雅的名字-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="parentCategory"type="string"><!--界说父category,也就是说我们的category能够嵌套构成树状布局-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>

<!--界说worklist,注重巨细写-->
<elementname="worklist">
<complexType>
<attributename="name"type="string"><!--界说worklist/name,可供显现的直不雅的名字-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="icon"type="string"><!--界说worklist/icon,可供显现的直不雅的图标-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="category"type="string">!--界说worklist/category,寄存的category地位。假如援用嵌套情势的category,则接纳parent_id/child_id的情势-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="class"type="string"><!--界说worklist/class,完成功效的类称号-->
<annotation>
<documentation>
</documentation>
<appInfo>
<meta.attributekind="java"/>
</appInfo>
</annotation>
</attribute>
<attributename="id"type="string"use="required"><!--界说worklist/id,独一标记-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<!--以下内容为PDE主动天生,与我们的编程有关-->
<annotation>
<appInfo>
<meta.sectiontype="since"/>
</appInfo>
<documentation>
[Enterthefirstreleaseinwhichthisextensionpointappears.]
</documentation>
</annotation>

<annotation>
<appInfo>
<meta.sectiontype="examples"/>
</appInfo>
<documentation>
[Enterextensionpointusageexamplehere.]
</documentation>
</annotation>

<annotation>
<appInfo>
<meta.sectiontype="apiInfo"/>
</appInfo>
<documentation>
[EnterAPIinformationhere.]
</documentation>
</annotation>

<annotation>
<appInfo>
<meta.sectiontype="implementation"/>
</appInfo>
<documentation>
[Enterinformationaboutsuppliedimplementationofthisextensionpoint.]
</documentation>
</annotation>

<annotation>
<appInfo>
<meta.sectiontype="copyright"/>
</appInfo>
<documentation>
</documentation>
</annotation>

</schema>
如许我们就界说好了扩大的属性。
然后在plugin.xml到场:
<extension-pointid="workList"name="workList"schema="schema/workList.exsd"/>
就界说好了!

2.完成扩大
界说完扩大以后,接上去要编写剖析此扩大的相干代码。可喜的是,Eclipse为我们供应了大批的API能够挪用,省下了多少代码的编写。别的我们还能够自创Eclipse完成的其他代码,经由过程仿照来编写我们本人的剖析代码。本例参考了View的剖析部分。同View,我们界说了WorkListDescriptor,WorkListRegistry,WorkListRegistryReader.个中WorkListDescriptor完成对上述界说的剖析,WorkListRegistry寄存了其他插件对workList扩大的相干信息,WorkListRegistryReader则从WorkListRegistry读失信息供我们利用。
此处代码从略,详细请参考View完成部分的ViewDescriptor,ViewRegistry,ViewRegistryReader相干代码。

3.编写界脸部分
依据1对View的扩大,我们必要编写界脸部分。此处请参考View插件的编写。我们在此对WorkListPlugin增加了一个办法用以从注册表中读取扩大信息:
publicIWorkListRegistrygetWorkListRegistry(){
if(workListRegistry==null){
workListRegistry=newWorkListRegistry();
try{
WorkListRegistryReaderreader=newWorkListRegistryReader();
reader.readWorkList(Platform.getExtensionRegistry(),workListRegistry);
}catch(CoreExceptione){
//cannotsafelyshowadialogsologit
WorkbenchPlugin.log("UnabletoreadworkListregistry.",e.getStatus());//$NON-NLS-1$
}
}
returnworkListRegistry;
}
个中WorkListRegistryReader.readWorkList界说以下:
/**
*ReadtheworkListextensionswithinaregistry.
*/
publicvoidreadWorkList(IExtensionRegistryin,WorkListRegistryout)
throwsCoreException{
//thisdoesnotseemtoreallyeverbethrowingantheexception
workListRegistry=out;
readRegistry(in,WorkListPlugin.getDefault().getPluginId(),"workList");
out.mapWorkListToCategories();
}
可见,我们不必要编写庞大的代码就能够读取注册表中寄存的扩大信息!
我们对workList扩大的显现是接纳了TreeView,代码以下(WorkListView):
protectedTreeViewercreateViewer(Compositeparent){
TreeViewerviewer=
newTreeViewer(parent,SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL);
viewer.setUseHashlookup(true);
viewer.setContentProvider(newWorkListContentProvider());
viewer.setLabelProvider(newWorkListLabelProvider());
workListReg=WorkListPlugin.getDefault().getWorkListRegistry();
viewer.setInput(workListReg);
initListeners(viewer);
returnviewer;
}
如许,就能够完成显现了。
那末,如何完成选择某个扩大后,经由过程双击实行其功效呢?我们对TreeViewer增加了鼠标双击事务撑持,关头代码以下:
protectedvoidhandleDoubleClick(DoubleClickEventevent){
IStructuredSelectionselection=(IStructuredSelection)event.getSelection();
Objectelement=selection.getFirstElement();

TreeViewerviewer=getWorkListViewer();
if(viewer.isExpandable(element)){
viewer.setExpandedState(element,!viewer.getExpandedState(element));
}else{
WorkListDescriptorworkList=(WorkListDescriptor)element;
try{
IWorkListPartworkListPart=(IWorkListPart)workList.createWorkList();
workListPart.run();
}catch(CoreExceptione){
//shouldaddsomethingtohandletheexception
}
}

}
个中IWorkListPart很复杂,使一切完成workList扩大必需完成的接口:
publicinterfaceIWorkListPart{

publicvoidrun();

}
只要一个run办法(能够自行增加其他的撑持)。
个中WorkListDescriptor.createWorkList办法完成依据class的字符串创立一个对象,也是超等复杂,由于Eclipse已为我们编好了:
publicObjectcreateWorkList()throwsCoreException{
Objectobj=WorkbenchPlugin.createExtension(configElement,"class");
returnobj;
}
如许就能够实行扩大的功效了。
可是别忘了,还要编写pluin.xml,不然Eclipse可不认吆:
<extension
point="net.softapp.worklist.workList">
<category
name="HelloTest"
id="HelloTest"/>
<worklist
icon="icons/example.ico"
class="net.softapp.internal.worklist.Hello"
category="HelloTest"
name="Hello"
id="net.softapp.internal.worklist.Hello"/>
</extension>

4.测试新扩大点

OK,入手下手运转Eclipse的plugin调试情况,翻开WorkList视图,看看在树状列内外是否是有一个HelloTest目次,上面有Hello。双击它,你编写的代码出来了吧!


你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-20 23:50:38 | 只看该作者
是一种使用者不需花费很多时间学习的语言
谁可相欹 该用户已被删除
板凳
发表于 2015-1-25 19:36:31 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
再见西城 该用户已被删除
地板
发表于 2015-2-3 11:52:46 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-8 20:25:47 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
爱飞 该用户已被删除
6#
发表于 2015-2-26 04:35:10 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
小妖女 该用户已被删除
7#
发表于 2015-3-8 11:56:37 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
分手快乐 该用户已被删除
8#
发表于 2015-3-11 02:32:20 | 只看该作者
是一种使用者不需花费很多时间学习的语言
小魔女 该用户已被删除
9#
发表于 2015-3-17 19:08:32 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
精灵巫婆 该用户已被删除
10#
发表于 2015-3-24 20:04:31 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表