﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font color="red"&gt;JRen&lt;/font&gt;&lt;font color="lightgreen"&gt;大鹏一曰同风起，扶摇直上九万里&lt;/font&gt;-随笔分类-Eclipse</title><link>http://www.blogjava.net/liaojiyong/category/11453.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 08 Aug 2009 19:39:27 GMT</lastBuildDate><pubDate>Sat, 08 Aug 2009 19:39:27 GMT</pubDate><ttl>60</ttl><item><title>Nice Eclipse RCP Application Demo</title><link>http://www.blogjava.net/liaojiyong/archive/2009/08/07/290191.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Fri, 07 Aug 2009 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2009/08/07/290191.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/290191.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2009/08/07/290191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/290191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/290191.html</trackback:ping><description><![CDATA[<br />
<a style="font-family: 隶书; color: red; font-size: 62pt" title="下载原码" href="/Files/liaojiyong/RCPdemo.rar">完整代码附上<br />
下载原码</a><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liaojiyong/rcpdemo.gif" /> <img src ="http://www.blogjava.net/liaojiyong/aggbug/290191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2009-08-07 09:48 <a href="http://www.blogjava.net/liaojiyong/archive/2009/08/07/290191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT/JFace实践：为Composite添加滚动条效果（ScrolledComposite）</title><link>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157093.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 31 Oct 2007 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157093.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/157093.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157093.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/157093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/157093.html</trackback:ping><description><![CDATA[工作中一个任务是为一个已经有的Composite添加滚动条，原以为可以这样实现：<br />
&nbsp;&nbsp;&nbsp; Composite scrollabledComposite = new Composite(parent, SWT.H_SCROLL | SWT.V_SCROLL);<br />
&nbsp;&nbsp;&nbsp;&nbsp; 再设置一下其它的参数就可以了，谁知这样是可以添加滚动条，但是滚动条里的Composite根本不会跟着动；于是，查API，发现有ScrolledComposite这个类，好家伙，这个类里的注释连main () 方法都提供了，正点！
<p>于是，我的代码如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentComposite.setLayout(new FillLayout());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ScrolledComposite scrolledComposite = new ScrolledComposite(parentComposite,&nbsp; SWT.H_SCROLL|SWT.V_SCROLL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Composite mainComposite = new Composite(scrolledComposite,SWT.NONE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrolledComposite.setContent(mainComposite);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainComposite.setBackground(Display.getCurrent().getSystemColor&nbsp;(SWT.COLOR_WHITE));// White color<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainComposite.setLayout(new GridLayout(1,true));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridData data = new GridData(GridData.FILL_BOTH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainComposite.setLayoutData(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Composite topComposite = new Composite(mainComposite, SWT.BORDER);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; topComposite.setLayout(new GridLayout(2, false));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; topComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));// White color</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reloadBtn = new Button(topComposite, SWT.PUSH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reloadBtn.setText("&amp;Reload from preferences");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reloadBtn.setToolTipText("Reload values from preference page(Shift+R)");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saveBtn = new Button(topComposite, SWT.PUSH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saveBtn.setText("&amp;Save to preferences");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saveBtn.setToolTipText("save values to preference page(Shift+S)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrolledComposite.setExpandHorizontal(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrolledComposite.setExpandVertical(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrolledComposite.setMinWidth(800);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrolledComposite.setMinHeight(400);</p>
<p><br />
&nbsp;<span style="color: red">总结：<br />
</span>&nbsp;1）在为Composite添加滚动条时，最上面的Composite的布局需设为FillLayout();<br />
&nbsp;2) 不要直接往scrolledComposite上面添加控件;<br />
&nbsp;3) 在创建完ScrolledComposite后不要忘记使用setContent()方法去设置滚动条所控制的Composite;<br />
&nbsp;4) 最重要的是,Scrolledcomposite的以下四个参数必须设置才能出现滚动条：<br />
&nbsp;&nbsp;&nbsp; scrolledComposite.setExpandHorizontal(true);<br />
&nbsp;&nbsp;&nbsp; scrolledComposite.setExpandVertical(true);<br />
&nbsp;&nbsp;&nbsp; scrolledComposite.setMinWidth(800);<br />
&nbsp;&nbsp;&nbsp; scrolledComposite.setMinHeight(400);<br />
&nbsp;&nbsp;&nbsp; 只有前两项设为true之后，后面的两项才起作用。<br />
5） 对于setMinWidth()和setMinHeight()方法，API的注释中是说用来设置滚动条出现的最小宽度和高度，但是我试了一下，有时出现滚动条了，<br />
&nbsp;&nbsp;&nbsp; 但是拖动滚动条还是不能显示Composite里面的全部内容，于是把setMinWidth()和setMinHeight()设大一些就可以了，个人感觉滚动条出现的<br />
&nbsp;&nbsp;&nbsp; 宽度和高度检测Scrolledcomposite自己已经实现了，这里的宽度和高度是指拖动滚动条里可以看到的Composite的最大宽度和最大高度。</p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/157093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-10-31 09:07 <a href="http://www.blogjava.net/liaojiyong/archive/2007/10/31/157093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把控制台重定向到GUI组件上（转）</title><link>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157092.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 31 Oct 2007 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157092.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/157092.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/157092.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/157092.html</trackback:ping><description><![CDATA[最近为一个项目的服务器的做一个界面的时候，为了能把原来在后台打印出来的相关信息重定向到GUI界面的时候，费了一些心思。都是以前在实现的时候大多数信息的打印和测试时使用的都是System.out和System.err之类，图个方便<img src="http://www.blogjava.net/CuteSoft_Client/CuteEditor/images/emteeth.gif" align="absMiddle" border="0"  alt="" />，没有使用log功能。当然这是个不好的习惯。<br />
&nbsp;&nbsp;&nbsp;刚开始的时候用Swing做了一个面板，采用JTextPane组件作为打印信息的容器。可能是太久没有用Swing了，在测试的时候这个东西的水平滑动块老是随着信息的显示自动地滑向最后的地方，而且打印信息看起来很凌乱。后来就换用SWT，把打印的信息容器换用Text组件，把样式定义为SWT.MULT | SWT.V_SCROLL | SWT.WRAP ，让它可以自动换行。<br />
&nbsp;&nbsp;&nbsp;查一下JDK的API文档，System类提供了可以重定向的方法setOut(PrintStream out)、setErr(PrintStream err)、setIn(InputStream in)。在此我们只需求使用setOut和setErr就够了，这二个方法都要传入一个PrintStream类型的参数，只要在调用打印信息的前面调用这二个方法重设输出流和错误流就可以达到我们的目的。那么我们继承PrintStream类，并把要显示信息的组件作为参数传入到这个自定义的打印流类中。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_47_461_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_461_Open_Text.style.display='none'; Codehighlighter1_47_461_Closed_Image.style.display='inline'; Codehighlighter1_47_461_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_47_461_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_47_461_Closed_Text.style.display='none'; Codehighlighter1_47_461_Open_Image.style.display='inline'; Codehighlighter1_47_461_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyPrintStream&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;PrintStream&nbsp;</span><span id="Codehighlighter1_47_461_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Text&nbsp;text;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_123_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_123_160_Open_Text.style.display='none'; Codehighlighter1_123_160_Closed_Image.style.display='inline'; Codehighlighter1_123_160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_123_160_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_123_160_Closed_Text.style.display='none'; Codehighlighter1_123_160_Open_Image.style.display='inline'; Codehighlighter1_123_160_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MyPrintStream(OutputStream&nbsp;out,&nbsp;Text&nbsp;text)&nbsp;</span><span id="Codehighlighter1_123_160_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(out);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;text;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_164_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_196_Open_Text.style.display='none'; Codehighlighter1_164_196_Closed_Image.style.display='inline'; Codehighlighter1_164_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_164_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_164_196_Closed_Text.style.display='none'; Codehighlighter1_164_196_Open_Image.style.display='inline'; Codehighlighter1_164_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_164_196_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_164_196_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在这里重截,所有的打印方法都要调用的方法<br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_247_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_457_Open_Text.style.display='none'; Codehighlighter1_247_457_Closed_Image.style.display='inline'; Codehighlighter1_247_457_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_247_457_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_247_457_Closed_Text.style.display='none'; Codehighlighter1_247_457_Open_Image.style.display='inline'; Codehighlighter1_247_457_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;write(</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buf,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;off,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len)&nbsp;</span><span id="Codehighlighter1_247_457_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(buf,&nbsp;off,&nbsp;len);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_306_326_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_326_Open_Text.style.display='none'; Codehighlighter1_306_326_Closed_Image.style.display='inline'; Codehighlighter1_306_326_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_306_326_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_306_326_Closed_Text.style.display='none'; Codehighlighter1_306_326_Open_Image.style.display='inline'; Codehighlighter1_306_326_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_306_326_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_306_326_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;SWT非界面线程访问组件的方式&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_372_452_Open_Image" onclick="this.style.display='none'; Codehighlighter1_372_452_Open_Text.style.display='none'; Codehighlighter1_372_452_Closed_Image.style.display='inline'; Codehighlighter1_372_452_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_372_452_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_372_452_Closed_Text.style.display='none'; Codehighlighter1_372_452_Open_Image.style.display='inline'; Codehighlighter1_372_452_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Display.getDefault().syncExec(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread()</span><span id="Codehighlighter1_372_452_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_394_448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_394_448_Open_Text.style.display='none'; Codehighlighter1_394_448_Closed_Image.style.display='inline'; Codehighlighter1_394_448_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_394_448_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_394_448_Closed_Text.style.display='none'; Codehighlighter1_394_448_Open_Image.style.display='inline'; Codehighlighter1_394_448_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()</span><span id="Codehighlighter1_394_448_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_400_417_Open_Image" onclick="this.style.display='none'; Codehighlighter1_400_417_Open_Text.style.display='none'; Codehighlighter1_400_417_Closed_Image.style.display='inline'; Codehighlighter1_400_417_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_400_417_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_400_417_Closed_Text.style.display='none'; Codehighlighter1_400_417_Open_Image.style.display='inline'; Codehighlighter1_400_417_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_400_417_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_400_417_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;在这里把信息添加到组件中&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text.append(message);<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
把组件作为参数传入到这个打印流中，并重写父类的write(byte[] buf, int off, int len)方法，把写出的信息添加到组件上，注意到重载了带OutputStream的构造方法。<br />
&nbsp;&nbsp;&nbsp;这里有二点必须注意，确保组件在调用打印信息添加前是已经被正确创建的，另外必须注册不同GUI组件对线程的访问形式，像上面的SWT就对界面的访问有严格的规定。<br />
&nbsp;&nbsp; 完成了PrintStream后，下面是如何使用，在我们启动界面后，使用下面的方式：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">MyPrintStream&nbsp;mps&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyPrintStream(System.out,&nbsp;text);<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setOut(mps);<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setErr(mps);</span></div>
<br />
，这样就可以把原来程序里的所有System.out和System.err信息转移到你的GUI界面上。<br />
<img src ="http://www.blogjava.net/liaojiyong/aggbug/157092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-10-31 09:04 <a href="http://www.blogjava.net/liaojiyong/archive/2007/10/31/157092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个ActionDelegate代理多个Action </title><link>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157091.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 31 Oct 2007 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157091.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/157091.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/157091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/157091.html</trackback:ping><description><![CDATA[以前在做Eclipse插件的时候，习惯一个功能定义一个操作项。比如说在org.eclipse.ui.popupMenus扩展点上，如果有添加这个功能，但是添加的类型有多样，我们假定现在有添加A、B、C、D四个元素，在扩展点上添加一个viewerContribution扩展，添加四个Action，分别为A、B、C、D。因为这四个添加功能非常相近，所以我们可以只写一个ActionDelegate，把这四个Action的代理类都指向同一个。但是ID必须区分。声明定义如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">viewerContribution<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="test.viewerContribution1"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetID</span><span style="color: #0000ff">="test.testView"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="test.AddTestDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="add.a"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</span><span style="color: #0000ff">="A"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="test.AddTestDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="add.b"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</span><span style="color: #0000ff">="B"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="test.AddTestDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="add.c"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</span><span style="color: #0000ff">="C"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="test.AddTestDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="add.d"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</span><span style="color: #0000ff">="D"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">viewerContribution</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;&nbsp;&nbsp; 上面的主要区别是在id，在所有的代理ActionDelegate中的run(IAction action)方法中都带有一个参数action，这个参数有个用途就是可以在运行时区别是对应的那个action。下面我们看一下AddTestDelegate类的定义：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;test;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.jface.action.IAction;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.jface.viewers.ISelection;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IViewActionDelegate;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IViewPart;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_238_713_Open_Image" onclick="this.style.display='none'; Codehighlighter1_238_713_Open_Text.style.display='none'; Codehighlighter1_238_713_Closed_Image.style.display='inline'; Codehighlighter1_238_713_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_238_713_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_238_713_Closed_Text.style.display='none'; Codehighlighter1_238_713_Open_Image.style.display='inline'; Codehighlighter1_238_713_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AddTestDelegate&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IViewActionDelegate&nbsp;</span><span id="Codehighlighter1_238_713_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_238_713_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;IViewPart&nbsp;view;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_292_316_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_316_Open_Text.style.display='none'; Codehighlighter1_292_316_Closed_Image.style.display='inline'; Codehighlighter1_292_316_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_292_316_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_292_316_Closed_Text.style.display='none'; Codehighlighter1_292_316_Open_Image.style.display='inline'; Codehighlighter1_292_316_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;AddTestDelegate()&nbsp;</span><span id="Codehighlighter1_292_316_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_292_316_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;自动生成构造函数存根</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_353_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_353_377_Open_Text.style.display='none'; Codehighlighter1_353_377_Closed_Image.style.display='inline'; Codehighlighter1_353_377_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_353_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_353_377_Closed_Text.style.display='none'; Codehighlighter1_353_377_Open_Image.style.display='inline'; Codehighlighter1_353_377_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init(IViewPart&nbsp;view)&nbsp;</span><span id="Codehighlighter1_353_377_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_353_377_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.view&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;view;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_413_616_Open_Image" onclick="this.style.display='none'; Codehighlighter1_413_616_Open_Text.style.display='none'; Codehighlighter1_413_616_Closed_Image.style.display='inline'; Codehighlighter1_413_616_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_413_616_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_413_616_Closed_Text.style.display='none'; Codehighlighter1_413_616_Open_Image.style.display='inline'; Codehighlighter1_413_616_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run(IAction&nbsp;action)&nbsp;</span><span id="Codehighlighter1_413_616_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_413_616_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;action.getId();<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_472_486_Open_Image" onclick="this.style.display='none'; Codehighlighter1_472_486_Open_Text.style.display='none'; Codehighlighter1_472_486_Closed_Image.style.display='inline'; Codehighlighter1_472_486_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_472_486_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_472_486_Closed_Text.style.display='none'; Codehighlighter1_472_486_Open_Image.style.display='inline'; Codehighlighter1_472_486_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(id.equals(</span><span style="color: #000000">"</span><span style="color: #000000">add.a</span><span style="color: #000000">"</span><span style="color: #000000">))</span><span id="Codehighlighter1_472_486_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_472_486_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">TODO</span><span style="color: #008000"><br />
</span><span style="color: #008080">25</span><span style="color: #008000"><img id="Codehighlighter1_514_528_Open_Image" onclick="this.style.display='none'; Codehighlighter1_514_528_Open_Text.style.display='none'; Codehighlighter1_514_528_Closed_Image.style.display='inline'; Codehighlighter1_514_528_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_514_528_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_514_528_Closed_Text.style.display='none'; Codehighlighter1_514_528_Open_Image.style.display='inline'; Codehighlighter1_514_528_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(id.equals(</span><span style="color: #000000">"</span><span style="color: #000000">add.b</span><span style="color: #000000">"</span><span style="color: #000000">))</span><span id="Codehighlighter1_514_528_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_514_528_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">TODO</span><span style="color: #008000"><br />
</span><span style="color: #008080">27</span><span style="color: #008000"><img id="Codehighlighter1_556_570_Open_Image" onclick="this.style.display='none'; Codehighlighter1_556_570_Open_Text.style.display='none'; Codehighlighter1_556_570_Closed_Image.style.display='inline'; Codehighlighter1_556_570_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_556_570_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_556_570_Closed_Text.style.display='none'; Codehighlighter1_556_570_Open_Image.style.display='inline'; Codehighlighter1_556_570_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(id.equals(</span><span style="color: #000000">"</span><span style="color: #000000">add.c</span><span style="color: #000000">"</span><span style="color: #000000">))</span><span id="Codehighlighter1_556_570_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_556_570_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">TODO</span><span style="color: #008000"><br />
</span><span style="color: #008080">29</span><span style="color: #008000"><img id="Codehighlighter1_598_612_Open_Image" onclick="this.style.display='none'; Codehighlighter1_598_612_Open_Text.style.display='none'; Codehighlighter1_598_612_Closed_Image.style.display='inline'; Codehighlighter1_598_612_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_598_612_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_598_612_Closed_Text.style.display='none'; Codehighlighter1_598_612_Open_Image.style.display='inline'; Codehighlighter1_598_612_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(id.equals(</span><span style="color: #000000">"</span><span style="color: #000000">add.d</span><span style="color: #000000">"</span><span style="color: #000000">))</span><span id="Codehighlighter1_598_612_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_598_612_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">TODO</span><span style="color: #008000"><br />
</span><span style="color: #008080">31</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img id="Codehighlighter1_687_710_Open_Image" onclick="this.style.display='none'; Codehighlighter1_687_710_Open_Text.style.display='none'; Codehighlighter1_687_710_Closed_Image.style.display='inline'; Codehighlighter1_687_710_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_687_710_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_687_710_Closed_Text.style.display='none'; Codehighlighter1_687_710_Open_Image.style.display='inline'; Codehighlighter1_687_710_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;selectionChanged(IAction&nbsp;action,&nbsp;ISelection&nbsp;selection)&nbsp;</span><span id="Codehighlighter1_687_710_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_687_710_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;自动生成方法存根</span><span style="color: #008000"><br />
</span><span style="color: #008080">37</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>&nbsp;&nbsp;&nbsp; 我们可以在运行时通过action.getId()在识别是对应的那个Action。<br />
&nbsp;&nbsp; 总结：这个途径可以为插件开发中避免写过多的ActionDelegate，把一些功能较为接近实现代码又比较少的操作合并在一起。当然，对于操作步骤比较多的，为了代码维护的方便，还是建议单独为它定义一个代理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/157091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-10-31 08:59 <a href="http://www.blogjava.net/liaojiyong/archive/2007/10/31/157091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>添加完整的Eclipse RCP帮助系统(转)</title><link>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157086.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 31 Oct 2007 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157086.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/157086.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/10/31/157086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/157086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/157086.html</trackback:ping><description><![CDATA[开发基于Eclipse开的RCP软件可以直接加入Eclipse的帮助系统，使您的产品更加完善。Eclipse帮助系统提供的良好组织模式以及基于lucene的全文搜索功能。在Eclipse的网站上有一篇文章专门介绍如何为Mail示例RCP添加帮助系统的，但是写的不完全，按照里面的说明添加后无法正常地显示帮助框架。网上有少部分文章也提及这个主题，但是都没有说明白。<br />
&nbsp;&nbsp;&nbsp; 经过一翻摸索，最后终于折腾出来，在这里记录下面，与大家分享。如果你做过RCP产品，下面这些内容应该很熟悉。<br />
&nbsp;&nbsp;&nbsp; 1. 添加帮助的菜单。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ApplicationActionBarAdvisor类中加入帮助菜单项。代码片断如下：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">帮助</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">private</span><span style="color: rgb(0,0,0)">&nbsp;IWorkbenchAction&nbsp;helpAction;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;创建操作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">protected</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;makeActions(IWorkbenchWindow&nbsp;window)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)">&nbsp;帮助&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpAction&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ActionFactory.HELP_CONTENTS.create(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register(helpAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;填充主菜单<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">protected</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,0)">&nbsp;fillMenuBar(IMenuManager&nbsp;menuBar)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/*</span><span style="color: rgb(0,128,0)">&nbsp;主菜单栏&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMenuManager&nbsp;mainMenu&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;getActionBarConfigurer().getMenuManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;helpMenu&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;MenuManager(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">帮助(&amp;H)</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">,&nbsp;IWorkbenchActionConstants.M_HELP);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpMenu.add(introAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpMenu.add(helpAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainMenu.add(helpMenu);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp;&nbsp; 2.&nbsp; 添加相关的依赖项。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开plugin.xml，转到"依赖项"的tab页,点击"添加"按钮，需要加入下面的这些依赖项：
<div style="border-right: rgb(102,102,102) 1px solid; border-top: rgb(102,102,102) 1px solid; border-left: rgb(102,102,102) 1px solid; border-bottom: rgb(102,102,102) 1px solid">1.<span><span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> </span></span><tt>org.apache.lucene<br />
2.</tt><tt>org.eclipse.help.appserver<br />
3.</tt><tt>org.eclipse.help.base<br />
4.</tt><tt>org.eclipse.help.ui<br />
5.</tt><tt>org.eclipse.help.webapp<br />
6.</tt><tt>org.eclipse.tomcat<br />
7.org.eclipse.ui.forms<br />
</tt></div>
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 3. 添加org.eclipse.help.toc扩展点<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 这个非常容易，转到"扩展"tab页，点击&#8220;添加&#8221;按钮。网上或是相关的书籍有很多关于添加help内容的介绍，为了节省篇幅，这里直接添加一个扩展向导来完成。选择"扩展向导"--&gt;"帮助内容"，确定后可以看到&#8220;所有扩展&#8221;的列表中多了一个org.eclipse.help.toc扩展，这里可能需要修改一下，生成的toc.xml和testToc.xml里面的label属性标签不能是乱码，不然帮助框架会读不出，到时候显示不出帮助的组织结构。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 结构如下：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(255,0,0)">point</span><span style="color: rgb(0,0,255)">="org.eclipse.help.toc"</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">toc&nbsp;</span><span style="color: rgb(255,0,0)">file</span><span style="color: rgb(0,0,255)">="toc.xml"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">toc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(255,0,0)">file</span><span style="color: rgb(0,0,255)">="testToc.xml"</span><span style="color: rgb(255,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;primary</span><span style="color: rgb(0,0,255)">="true"</span><span style="color: rgb(0,0,255)">/&gt;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">extension</span><span style="color: rgb(0,0,255)">&gt;</span></div>
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 4. 部署产品配置<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 为您的RCP添加一个产品配置，打开产品配置编辑器（xxx.product），转到"配置"tab页，点击&#8220;添加&#8221;，加入你的插件，然后点击&#8220;添加必需的插件&#8221;,这样在&#8220;插件和段&#8221;列表会看到你的插件以及你的RCP要完整启动的所有必需相关插件。在这里你应该看到你在plugin.xml中依赖的那七个help相关的插件，以及一些以nl1结尾的插件，这些是语言插件。保存，转到&#8220;概述&#8221;tab页，点击"启动产品"。然后打开&#8220;帮助--&gt; 帮助内容&#8221;，就可能看到你的帮助系统了。<br />
&nbsp;&nbsp;&nbsp; 到此一个完整的帮助系统就完成了。下面是一个截图：<br />
&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/h.jpg" />
<img src ="http://www.blogjava.net/liaojiyong/aggbug/157086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-10-31 08:44 <a href="http://www.blogjava.net/liaojiyong/archive/2007/10/31/157086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT实现任务栏图标（系统托盘），带菜单和ToolTip(轉)</title><link>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93457.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Fri, 12 Jan 2007 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93457.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/93457.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/93457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/93457.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1 import org.eclipse.swt.SWT; 2 import org.eclipse.swt.events.ShellListener; 3 import org.eclipse.swt.graphics.Image; 4 import org.eclipse.swt.internal.win32.OS; 5 import org.eclipse.swt.widgets.Displ...&nbsp;&nbsp;<a href='http://www.blogjava.net/liaojiyong/archive/2007/01/12/93457.html'>阅读全文</a><img src ="http://www.blogjava.net/liaojiyong/aggbug/93457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-01-12 15:33 <a href="http://www.blogjava.net/liaojiyong/archive/2007/01/12/93457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse系统托盘插件EaseTray2.0.0 (轉)</title><link>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93437.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Fri, 12 Jan 2007 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93437.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/93437.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2007/01/12/93437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/93437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/93437.html</trackback:ping><description><![CDATA[
		<p>EaseTray2.0.0，提供最小化到系统托盘、关闭到系统托盘的功能。<br /><img height="36" alt="snap200606.jpg" src="http://www.blogjava.net/images/blogjava_net/vip01/snap200606.jpg" width="70" border="0" /><br />启动时自动加载，工具栏按钮切换状态。<img height="30" alt="snap200604.jpg" src="http://www.blogjava.net/images/blogjava_net/vip01/snap200604.jpg" width="98" border="0" /><img height="34" alt="snap200605.jpg" src="http://www.blogjava.net/images/blogjava_net/vip01/snap200605.jpg" width="89" border="0" /><br />支持中英文。<br /><img height="170" alt="2007010101.jpg" src="http://www.blogjava.net/images/blogjava_net/vip01/2007010101.jpg" width="522" border="0" /><img height="142" alt="2007010102.jpg" src="http://www.blogjava.net/images/blogjava_net/vip01/2007010102.jpg" width="522" border="0" /><br /><br />下载：<a href="/Files/liaojiyong/EaseTray_2.0.0.v20070101.zip">EaseTray_2.0.0.v20070101.zip</a><br /><br />有朋友说运行后会提示<br />"this chosen operation is not currently available"<br />或"当前操作不可用"等</p>
		<p>请确认<font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">jdk版本&gt;=1.5</font></p>
		<p>本插件已经在<br />eclipse3.2.1<br />wtp1.5.2<br />myeclipse5.1<br />jdk6<br />jdk5<br />环境下测试通过<br /></p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/93437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2007-01-12 14:48 <a href="http://www.blogjava.net/liaojiyong/archive/2007/01/12/93437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse所有版本注册码的通用算法（转）</title><link>http://www.blogjava.net/liaojiyong/archive/2006/12/10/86650.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Sun, 10 Dec 2006 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/12/10/86650.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/86650.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/12/10/86650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/86650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/86650.html</trackback:ping><description><![CDATA[
		<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		<span style="COLOR: #0000ff">import</span>
		<span style="COLOR: #000000"> java.io.</span>
		<span style="COLOR: #000000">*</span>
		<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_37_2240_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_2240_Open_Text.style.display='none'; Codehighlighter1_37_2240_Closed_Image.style.display='inline'; Codehighlighter1_37_2240_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_37_2240_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_2240_Closed_Text.style.display='none'; Codehighlighter1_37_2240_Open_Image.style.display='inline'; Codehighlighter1_37_2240_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
		<span style="COLOR: #0000ff">public</span>
		<span style="COLOR: #000000"> </span>
		<span style="COLOR: #0000ff">class</span>
		<span style="COLOR: #000000"> Crack </span>
		<span id="Codehighlighter1_37_2240_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_37_2240_Open_Text">
				<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_81_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_648_Open_Text.style.display='none'; Codehighlighter1_81_648_Closed_Image.style.display='inline'; Codehighlighter1_81_648_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_81_648_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_81_648_Closed_Text.style.display='none'; Codehighlighter1_81_648_Open_Image.style.display='inline'; Codehighlighter1_81_648_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> String convert(String s) </span>
				<span id="Codehighlighter1_81_648_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_81_648_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000"> (s </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">||</span>
						<span style="COLOR: #000000"> s.length() </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> s;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">byte</span>
						<span style="COLOR: #000000"> abyte0[] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> s.getBytes();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> ac[] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">[s.length()];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_288_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_288_609_Open_Text.style.display='none'; Codehighlighter1_288_609_Closed_Image.style.display='inline'; Codehighlighter1_288_609_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_288_609_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_288_609_Closed_Text.style.display='none'; Codehighlighter1_288_609_Open_Image.style.display='inline'; Codehighlighter1_288_609_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> k </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> abyte0.length; i </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> k; i</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">) </span>
						<span id="Codehighlighter1_288_609_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_288_609_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> j </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> abyte0[i];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (j </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">48</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">&amp;&amp;</span>
								<span style="COLOR: #000000"> j </span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">57</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               j </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ((j </span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">48</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">5</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">%</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">10</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">48</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (j </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">65</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">&amp;&amp;</span>
								<span style="COLOR: #000000"> j </span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">90</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               j </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ((j </span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">65</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">13</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">%</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">26</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">65</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (j </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">97</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">&amp;&amp;</span>
								<span style="COLOR: #000000"> j </span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">122</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               j </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> ((j </span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">97</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">13</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">%</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">26</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">97</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           ac[i] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">char</span>
								<span style="COLOR: #000000">) j;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> String.valueOf(ac);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						<br />
						<img id="Codehighlighter1_688_866_Open_Image" onclick="this.style.display='none'; Codehighlighter1_688_866_Open_Text.style.display='none'; Codehighlighter1_688_866_Closed_Image.style.display='inline'; Codehighlighter1_688_866_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
						<img id="Codehighlighter1_688_866_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_688_866_Closed_Text.style.display='none'; Codehighlighter1_688_866_Open_Image.style.display='inline'; Codehighlighter1_688_866_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">private</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> hash(String s) </span>
				<span id="Codehighlighter1_688_866_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_688_866_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> ac[] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> s.toCharArray();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> j </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> k </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ac.length; j </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> k; j</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           i </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">31</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> i </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> ac[j];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> Math.abs(i);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						<br />
						<img id="Codehighlighter1_908_1212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_908_1212_Open_Text.style.display='none'; Codehighlighter1_908_1212_Closed_Image.style.display='inline'; Codehighlighter1_908_1212_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
						<img id="Codehighlighter1_908_1212_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_908_1212_Closed_Text.style.display='none'; Codehighlighter1_908_1212_Open_Image.style.display='inline'; Codehighlighter1_908_1212_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">private</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> String inputString() </span>
				<span id="Codehighlighter1_908_1212_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_908_1212_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       BufferedReader bufferedreader </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> BufferedReader(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> InputStreamReader(System.in));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       String s </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_1054_1105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1054_1105_Open_Text.style.display='none'; Codehighlighter1_1054_1105_Closed_Image.style.display='inline'; Codehighlighter1_1054_1105_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1054_1105_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1054_1105_Closed_Text.style.display='none'; Codehighlighter1_1054_1105_Open_Image.style.display='inline'; Codehighlighter1_1054_1105_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000"> </span>
						<span id="Codehighlighter1_1054_1105_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1054_1105_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           s </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> bufferedreader.readLine();<br /><img id="Codehighlighter1_1139_1190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1139_1190_Open_Text.style.display='none'; Codehighlighter1_1139_1190_Closed_Image.style.display='inline'; Codehighlighter1_1139_1190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1139_1190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1139_1190_Closed_Text.style.display='none'; Codehighlighter1_1139_1190_Open_Image.style.display='inline'; Codehighlighter1_1139_1190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">catch</span>
						<span style="COLOR: #000000"> (IOException ioexception) </span>
						<span id="Codehighlighter1_1139_1190_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1139_1190_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           ioexception.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> s;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						<br />
						<img id="Codehighlighter1_1257_2238_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1257_2238_Open_Text.style.display='none'; Codehighlighter1_1257_2238_Closed_Image.style.display='inline'; Codehighlighter1_1257_2238_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
						<img id="Codehighlighter1_1257_2238_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1257_2238_Closed_Text.style.display='none'; Codehighlighter1_1257_2238_Open_Image.style.display='inline'; Codehighlighter1_1257_2238_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> main(String args[]) </span>
				<span id="Codehighlighter1_1257_2238_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1257_2238_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_1270_2154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1270_2154_Open_Text.style.display='none'; Codehighlighter1_1270_2154_Closed_Image.style.display='inline'; Codehighlighter1_1270_2154_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1270_2154_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1270_2154_Closed_Text.style.display='none'; Codehighlighter1_1270_2154_Open_Image.style.display='inline'; Codehighlighter1_1270_2154_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000"> </span>
						<span id="Codehighlighter1_1270_2154_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1270_2154_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">My Eclipse IDE v9.99 Keygen</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           System.out.print(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">License Name : </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           String s </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> inputString();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           String licStr </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">YE3MP-999-00-9912310</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           String h </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> s.substring(</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                   </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> licStr<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                   </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                   </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> s;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> j </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> hash(h);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           String lic </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> s.substring(</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> licStr </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> Integer.toString(j);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">License Key : </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> convert(lic));<br /><img id="Codehighlighter1_2184_2233_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2184_2233_Open_Text.style.display='none'; Codehighlighter1_2184_2233_Closed_Image.style.display='inline'; Codehighlighter1_2184_2233_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2184_2233_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2184_2233_Closed_Text.style.display='none'; Codehighlighter1_2184_2233_Open_Image.style.display='inline'; Codehighlighter1_2184_2233_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">catch</span>
						<span style="COLOR: #000000"> (Exception exception) </span>
						<span id="Codehighlighter1_2184_2233_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_2184_2233_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           exception.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
		</span>
		<p> </p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/86650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-12-10 11:21 <a href="http://www.blogjava.net/liaojiyong/archive/2006/12/10/86650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建struts1.2 + Hibernate3.0 Web工程(转)</title><link>http://www.blogjava.net/liaojiyong/archive/2006/06/14/52842.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 14 Jun 2006 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/06/14/52842.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/52842.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/06/14/52842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/52842.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/52842.html</trackback:ping><description><![CDATA[
		<p>
				<strong>1. 环境说明</strong>
		</p>
		<p>　　安装Eclipse和安装MyEclipse组件的过程在这里不进行介绍。可以参考其它资料完成Eclipse环境的安装与资源的配置。</p>
		<p>　　接下来的篇幅将给出一个在MyEclipse开发环境下的一个Web工程实例。说明在MyEclipse的集成开发环境下，如何利用Struts进行Web工程开发。</p>
		<p>例子工程的环境：</p>
		<p>Windows 2000 Professional或者更高的版本。<br />J2SDK 5.0<br />Apache Tomcat 5.0<br />MySQL 4.0.14b<br />Eclipse-SDK-3.1<br />MyEclipse 4.0<br />SQLyog407(可选)</p>
		<p>
				<strong>
						<a name="2">2. 例子工程说明</a>
				</strong>
		</p>
		<p>　　本例子是利用struts架构，实现用户logon的Web工程。在这个工程中，用户可以访问三个页面，index.jsp、logon.jsp、menu.jsp。他们的关系如下图所示：</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104458573.jpg" target="_blank">
				</a> <img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104458573.jpg" /></p>
		<p>　　其中，左上角的方框代表struts结构中/WEB-INF/struts-config.xml中定义的，&lt;global-forwards&gt;，也就是在整个Web工程中，只要有logon的动作发生，都会使画面转移到logon.jsp。那么处理logon.jsp画面的formbeen是上图上放右侧的模块表示的formbean来完成——logonForm。</p>
		<p>　　LogonFrom处理后会有两个结果，“success”的时候，画面会转移到menu.jsp，失败的话，回到logon画面。</p>
		<p>　　在logon画面，用户需要输入用户名和密码，点击submit，进行登录认证。输入内容的检测是在logonForm的bean中检查。判断操作在logonAction的bean中完成，在logonAction的bean中，需要访问MySql数据库的Account表格，进行用户和密码的查询。查询成功的话，证明用户认证通过。 </p>
		<p>
				<strong>
						<a name="3">3. 建立工程</a>
				</strong>
		</p>
		<p>
				<strong>
						<a name="4">3.1 v创建新的Web Project</a>
				</strong>
		</p>
		<p>　　启动MyEclipse，通过Wizard，建立一个Web工程。如下图：</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104458276.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104458276.jpg" />
				</a> </p>
		<p>　　点击project后，MyEclipse弹出工程的对话框，我们在所罗列的工程中选中MyEclipse下面的J2EE Projects的Web Project。如下图所示：</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459529.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459529.jpg" />
				</a> </p>
		<p>　　在Wizard的下一页，必要的输入信息是Project Name、Context root URL。最后点击finish，一个空的WebProject就已经建立起来了</p>
		<p>
				<strong>
						<a id="5" name="5">3.2 加载Struts</a>
				</strong>
		</p>
		<p>　　在新创建的Web Project中加载struts。</p>
		<p>　　在MyEclipse集成开发环境下，已经集成了struts开发的环境，用户可以根据自己的实际需要，加载struts的环境。加载过程如下图：</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459553.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459553.jpg" />
				</a> </p>
		<p>　　右键点击刚刚创建好的工程，点击MyEclipse属性，在扩展的右键菜单里面，选择Add Struts Capabilities。</p>
		<p>　　MyEclipse集成环境就会自动将Struts所需要的目录结构进行创建，并将需要的环境资源自动引用到相应的目录中去。</p>
		<p>　　我们还要对自动生成的Struts进行修正，首先，修改WEB-INF/web.xml 将&lt;web-app&gt;标签中的属性删除。&lt;web-app XXXXXXXXXXXXXXX&gt; -&gt; &lt;web-app&gt;</p>
		<p>　　其次要添加本工程的标签定义库，添加&lt;taglib&gt;&lt;/taglib&gt; <br />&lt;taglib&gt;<br />    &lt;taglib-uri&gt;/WEB-INF/app.tld&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/app.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/WEB-INF/struts-bean.tld&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/struts-bean.tld<br />&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/WEB-INF/struts-html.tld&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/struts-html.tld<br />&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/WEB-INF/struts-logic.tld&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/struts-logic.tld<br />&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br /></p>
		<p>
				<strong>
						<a name="_Toc112057961">4. 完善工程</a>
				</strong>
		</p>
		<p>
				<strong>
						<a name="_Toc112057962">4.1 添加index画面</a>
				</strong>
		</p>
		<p>　　在加载完Struts结构之后，就可以在这个工程中添加内容了。我们可以添加一个画面JSP。添加JSP很简单，点击工程的右键，添加JSP。Wizard会弹出一个添加的对话框。如下图： </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459980.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459980.jpg" />
				</a> </p>
		<p>　　在File Name栏中改变文件名称，改成index.jsp把这个jsp作为Web工程的第一个画面。</p>
		<p>　　Template To Use 栏可以选择第五项（选择选择其他项也可以）。</p>
		<p>　　对于新生成的jsp文件进行必要的修改。</p>
		<p>Index.jsp文件：<br />&lt;taglib&gt;<br />&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br /><br />&lt;%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %&gt;<br /><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt;<br />    <br />    <span class="style1">&lt;meta http-equiv="pragma" content="no-cache"&gt;<br />    &lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />    &lt;meta http-equiv="expires" content="0"&gt;<br />    &lt;meta http-equiv="keywords" content="<br />keyword1,keyword2,keyword3"&gt;<br />    &lt;meta http-equiv="description" content="This is my page"&gt;<br /></span>    <br />    &lt;!--<br />    &lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;<br />    --&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />  <span class="style2">&lt;h3&gt;&lt;bean:message key="index.heading"/&gt;&lt;/h3&gt;<br />&lt;html:link page="/logon.jsp"&gt;&lt;bean:message key="index.logon"/&gt;&lt;/html:link&gt;</span><br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<p>　其中蓝色和橙色部分是修改的内容，蓝色部分是今后自动添加jsp文件必须修改的地方，让这个页面用到的tag都能在这个工程中定义的tag集合中找到。</p>
		<p>　　橙色部分是画面的主要显示内容。&lt;h3&gt;&lt;/h3&gt;的内容是一段文本，内容被struts结构的静态文本集合中的index.heading给替换掉了。这个文本的内容可以在工程的src\com\yourcompany\struts\ApplicationResources.properties文件中找到。Struts结构推荐用户将页面上的静态文本用ApplicationResources的形式替换。这样可以在大量的维护页面文字时候，感到便捷很多，同时，也大大减轻了多国语言版本网页的维护。</p>
		<p>　　&lt;html:link page="/logon.jsp"&gt;相当于html语言中的&lt;a herf=xxxxx&gt;。这个tag是在/WEB-INF/struts-html.tld中可以找到并在显示页面的时候，被转义成&lt;a herf=xxxxx&gt; </p>
		<p>
				<strong>
						<a name="_Toc112057963">4.2 添加logon画面</a>
				</strong>
		</p>
		<p>　　添加方法跟添加index画面相同。修改内容稍微有些差别。</p>
		<p>Logon.jsp的内容：<br /><br />&lt;taglib&gt;<br />&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br /><br /><span class="style1">&lt;%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %&gt;</span><br /><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html:html locale="true"&gt;<br />  &lt;head&gt;<br />    &lt;html:base /&gt;<br />    <br />    &lt;title&gt;logon.jsp&lt;/title&gt;<br />    <br />    &lt;meta http-equiv="pragma" content="no-cache"&gt;<br />    &lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />    &lt;meta http-equiv="expires" content="0"&gt;    <br />    &lt;meta http-equiv="keywords" <br />content="keyword1,keyword2,keyword3"&gt;<br />    &lt;meta http-equiv="description" content="This is my page"&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />    &lt;html:form <span class="style2">action="/logon.do"</span> method="post"  <span class="style2">focus="userName"</span>&gt;<br />      &lt;table border="0"&gt;<br />        &lt;tr&gt;<br />          &lt;td&gt;&lt;bean:message key="prompt.username"/&gt;&lt;/td&gt;<br />          &lt;td&gt;&lt;html:text <span class="style2">property="userName"</span> /&gt;&lt;/td&gt;<br />        &lt;/tr&gt;<br />        &lt;tr&gt;<br />          &lt;td&gt;Password:&lt;/td&gt;<br />          &lt;td&gt;&lt;html:password property="password" /&gt;&lt;/td&gt;<br />        &lt;/tr&gt;<br />        &lt;tr&gt;<br />          &lt;td colspan="2" align="center"&gt;&lt;html:submit /&gt;&lt;/td&gt;<br />        &lt;/tr&gt;<br />      &lt;/table&gt;<br />    &lt;/html:form&gt;<br />  &lt;/body&gt;<br />&lt;/html:html&gt;<br /></p>
		<p>　　其中，蓝色部分是引用本工程的tag标示库，红色的部分是表单属性名称的修改，和指定action动作的名称。</p>
		<p>
				<strong>
						<a name="_Toc112057964">4.3 修改WEB-INF/struts-config.xml</a>
				</strong>
		</p>
		<p>　　画面上出现了form，那么根据struts的结构要求，就必须在WEB-INF/struts-config.xml中明确这个form的formbean（表单内容校验的java class）是什么。执行这个form的action（表单执行的内部逻辑）是什么，以及action的结果会产生怎样的画面迁移。这些都是在WEB-INF/struts-config.xml中定义的。也就是标准的MVC架构所要求的。 <br /><span class="style1">&lt;taglib&gt;<br />&lt;struts-config&gt;<br />  &lt;form-beans &gt;<br />    &lt;form-bean name="logonForm" type="com.yourcompany.forms.<br />LogonForm" /&gt;<br />  &lt;/form-beans&gt;</span><br /><br />  <span class="style2">&lt;global-forwards &gt;<br />    &lt;forward name="logon" path="/logon.jsp" /&gt;<br />  &lt;/global-forwards&gt;</span><br /><br />  <span class="style3">&lt;action-mappings &gt;<br />    &lt;action<br />      path="/logon"<br />      type="com.yourcompany.actions.LogonAction"<br />      name="logonForm"<br />      scope="request"<br />      input="/logon.jsp"&gt;<br />      &lt;forward name="success" path="/menu.jsp" /&gt;<br />      &lt;forward name="fails" path="/logon.jsp" /&gt;<br />    &lt;/action&gt;<br />  &lt;/action-mappings&gt;<br /><br /></span>  &lt;message-resources parameter="com.yourcompany.struts.<br />ApplicationResources" /&gt;<br />&lt;/struts-config&gt;<br /><br /></p>
		<p>　　其中&lt;action&gt;部分是说明action的属性。</p>
		<p>　　Path 指定Action处理的URL</p>
		<p>　　Type 指定Action的类名</p>
		<p>　　Name 指定Action主力的ActionForm名，与&lt;form-beans &gt;元素的name属性匹配。</p>
		<p>　　Scope 指定ActionForm存在的范围</p>
		<p>　　Input 指定包含客户提交表单的网页，如果ActionForm的Validate方法返回错误，则因该把用户请求转发到这个网页。</p>
		<p>　　Validate 如果取值为true，则表示ActionServlet应该调用ActionForm的validate方法</p>
		<p>　　Forward 就是Action的execute方法执行完毕后，把客户请求在转发给相应的页面。</p>
		<p>
				<strong>
						<a name="_Toc112057965">4.4 添加formbean和actionbean</a>
				</strong>
		</p>
		<p>　　添加方法跟JSP相同，但是在选择superclass的时候，formbean要选择ActionForm作为类的父类。Actionbean的父类是Action</p>
		<p>　　下面是各自的代码</p>
		<p>LogonForm.java文件内容:<br /><br />&lt;taglib&gt;<br />package com.yourcompany.forms;<br />import javax.servlet.http.HttpServletRequest;<br /><br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionMapping;<br /><br />public class LogonForm extends ActionForm {<br /><br />private static final long serialVersionUID <br />= 7322786881443789688L;<br />// ------------------------------<br />--------------------------- Instance Variables<br />    private String username = null;<br />    private String password = null;<br /><br />// -------------------------<br />-------------------------------- Methods<br />    public String getUserName() {<br />return (this.username);<br />    }<br /><br />    public void setUserName(String username) {<br />        this.username = username;<br />    }<br /><br />    public String getPassword() {<br />return (this.password);<br />    }<br /><br />    public void setPassword(String password) {<br />        this.password = password;<br />    }<br /><br />public void reset(ActionMapping mapping, <br />HttpServletRequest request) {<br />this.password = null;<br />this.username = null;<br />}<br /><br />}<br /><br />LogonAction.java文件：<br />package com.yourcompany.actions;<br /><br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br /><br />import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br /><br />import com.yourcompany.forms.LogonForm;<br /><br />public class LogonAction extends Action {<br /><br />public ActionForward execute(ActionMapping <br />mapping, ActionForm form,<br />HttpServletRequest request, <br />HttpServletResponse response) {<br /><br />String userName = null;<br />String password = null;<br /><br />if (form != null) {<br />userName = ((LogonForm) form).getUserName();<br />password = ((LogonForm) form).getPassword();<br />}<br />if(userName.equals(“test1”) &amp;&amp; password. <br />equals(“test1”)){<br />return (mapping.findForward("success"));<br />}<br />else{<br />return (mapping.findForward("fails"));<br />}<br />}<br /><br />}<br /></p>
		<p>
				<strong>
						<a name="_Toc112057966">4.5 添加menu画面</a>
				</strong>
		</p>
		<p>　　与添加index画面的方法相同。下面是menu.jsp文件的内容<br /><br />&lt;taglib&gt;<br />&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br /><br />&lt;%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt;<br />&lt;%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %&gt;<br /><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html:html locale="true"&gt;<br />  &lt;head&gt;<br />    &lt;html:base /&gt;<br />        &lt;title&gt;menu.jsp&lt;/title&gt;<br />        &lt;meta http-equiv="pragma" content="no-cache"&gt;<br />    &lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />    &lt;meta http-equiv="expires" content="0"&gt;    <br />    &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br />    &lt;meta http-equiv="description" content="This is my page"&gt;<br />  &lt;/head&gt;<br />    &lt;body&gt;<br />  &lt;h3&gt;&lt;bean:message key="menu.message"/&gt;&lt;/h3&gt;<br />  &lt;/body&gt;<br />&lt;/html:html&gt;<br /></p>
		<p>
				<strong>
						<a name="_Toc112057967">5. 调试工程</a>
				</strong>
		</p>
		<p>如果本地机器已经安装了Tomcat5，那么可以在MyEclilpse的环境下调试工程了。</p>
		<p>指定Tomcat5 的web application service 如下图：</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459464.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459464.jpg" />
				</a> </p>
		<p>将Enable选项打开，并且指定Tomcat的安装目录。</p>
		<p>配置目前的工程到Tomcat中去。</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459814.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459814.jpg" />
				</a> </p>
		<p>点选工具栏上的被红线圈出的按钮</p>
		<p>在弹出来的对话框中选择，我们创建的工程，和添加Tomcat5 的web application service</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459884.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459884.jpg" />
				</a> </p>
		<p>然后就可以按下工具栏上的启动服务按钮，调试这个Web工程了。</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459526.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459526.jpg" />
				</a> </p>
		<p>每一次改动工程中的文件后，要想看看改动后的效果，那么就在配置工程中，重新发布这个工程到tomecat5去。</p>
		<p>
				<strong>
						<a name="_Toc112057968">
						</a>6. Tomcat下如何配置mysql的数据库连接池</strong>
		</p>
		<p>
				<strong>
						<a name="_Toc112057969">
						</a>6.1 配置server.xml</strong>
		</p>
		<p>配置Tomcat的server.xml文件，路径：【TOMCAT_HOME】\common\lib下的server.xml文件在&lt;/host&gt;之前加入以下内容以添加JNDI数据源： <br /><br />&lt;taglib&gt;<br />&lt;Context path="/<span class="style1">DBTest</span>" docBase="<span class="style1">DBTest</span>"<br />        debug="5" reloadable="true" crossContext="true"&gt;<br />  &lt;Logger className="org.apache.catalina.logger.FileLogger"<br />             prefix="localhost_DBTest_log." suffix=".txt"<br />             timestamp="true"/&gt;<br />  &lt;Resource name="<span class="style2">jdbc/TestDB</span>"<br />               auth="Container"<br />               type="javax.sql.DataSource"/&gt;<br />  &lt;ResourceParams name="<span class="style2">jdbc/TestDB</span>"&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;factory&lt;/name&gt;<br />    &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- Maximum number of dB connections in pool. Make sure you<br />         configure your mysqld max_connections large enough to handle<br />         all of your db connections. Set to 0 for no limit.<br />         --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;maxActive&lt;/name&gt;<br />      &lt;value&gt;100&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- Maximum number of idle dB connections to retain in pool.<br />         Set to 0 for no limit.<br />         --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;maxIdle&lt;/name&gt;<br />      &lt;value&gt;30&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- Maximum time to wait for a dB connection to become available<br />         in ms, in this example 10 seconds. An Exception is thrown if<br />         this timeout is exceeded.  Set to -1 to wait indefinitely.<br />         --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;maxWait&lt;/name&gt;<br />      &lt;value&gt;10000&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- MySQL dB username and password for dB connections  --&gt;<br />    &lt;parameter&gt;<br />     &lt;name&gt;username&lt;/name&gt;<br />     &lt;value&gt;root&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;parameter&gt;<br />     &lt;name&gt;password&lt;/name&gt;<br />     &lt;value&gt; &lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- Class name for mm.mysql JDBC driver --&gt;<br />    &lt;parameter&gt;<br />       &lt;name&gt;driverClassName&lt;/name&gt;<br />       &lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- The JDBC connection url for connecting to your MySQL dB.<br />         The autoReconnect=true argument to the url makes sure that the<br />         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the<br />         connection.  mysqld by default closes idle connections after 8 hours.<br />         --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;url&lt;/name&gt; &lt;value&gt;jdbc:mysql://192.168.0.208:3306<br />/db_test_account?autoReconnect=true&lt;/value&gt;<br />    &lt;/parameter&gt;<br />  &lt;/ResourceParams&gt;<br />&lt;/Context&gt;<br /></p>
		<p>注意:</p>
		<p>*其中蓝色字体表示你这个应用的路径和别名,也就是你访问自己配置的这个web站点的名字,注意区分大小写,必须一致,否则系统无法正常运行(例:http://localhost:8080/DBTest)</p>
		<p>*其中红色字体表示数据源的名字,注意将会被web.xml和你访问数据库的程序调用</p>
		<p>
				<strong>
						<a name="_Toc112057970">
						</a>6.2 配置web.xml</strong>
		</p>
		<p>配置Web用程序的web.xml文件 <br /><br />&lt;taglib&gt;<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />    &lt;!DOCTYPE web-app PUBLIC<br />    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />    "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />  &lt;description&gt;MySQL Test App&lt;/description&gt;<br />  &lt;resource-ref&gt;<br />      &lt;description&gt;DB Connection&lt;/description&gt;<br />      &lt;res-ref-name&gt;jdbc/TestDB&lt;/res-ref-name&gt;<br />      &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />      &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />  &lt;/resource-ref&gt;<br />&lt;/web-app&gt;<br /></p>
		<p>
				<a name="_Toc112057971">
				</a>
				<strong>6.3 访问数据库的程序片段<br /><br /></strong>&lt;taglib&gt;<br />package swt.db.DBUtility;<br /><br />import javax.naming.*; <br />import javax.sql.*; <br />import java.sql.*; <br /><br />public class DBTest { <br /><br />  String foo = "Not Connected"; <br />  int bar = -1; <br />     <br />  public void init() { <br />    try{ <br />      Context ctx = new InitialContext(); <br />      if(ctx == null )  <br />          throw new Exception("Boom - No Context"); <br />      DataSource ds =  <br />            (DataSource)ctx.lookup( <br />               "java:comp/env/jdbc/TestDB"); <br />      if (ds != null) { <br />        Connection conn = ds.getConnection();      <br />        if(conn != null)  { <br />            foo = "Got Connection "+conn.toString(); <br />            Statement stmt = conn.createStatement(); <br />            ResultSet rst =  <br />                stmt.executeQuery( <br />                  " select UserName from t_account "); <br />            if(rst.next()) { <br />               foo=rst.getString(1); <br />               bar=208; <br />            } <br />            conn.close(); <br />        } <br />      } <br />    }catch(Exception e) { <br />      e.printStackTrace(); <br />    } <br />} <br />public String getFoo() { return foo; } <br />public int getBar() { return bar;} <br />}</p>
		<p>
				<a name="_Toc112057972">
				</a>
				<strong>6.4 Jsp页面(index.jsp)<br /><br /></strong>&lt;taglib&gt;<br />&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br />&lt;%@ page import ="swt.db.DBUtility.*" %&gt;<br />&lt;html&gt; <br />  &lt;head&gt; <br />    &lt;title&gt;DB Test&lt;/title&gt; <br />  &lt;/head&gt; <br />  &lt;body&gt; <br />  &lt;% <br />    DBTest tst = new DBTest();<br />    tst.init(); <br />  %&gt; <br />  &lt;h2&gt;Results&lt;/h2&gt; <br />    Foo &lt;%= tst.getFoo() %&gt;&lt;br&gt; <br />    Bar &lt;%= tst.getBar() %&gt; <br />  &lt;/body&gt; <br />&lt;/html&gt;<br /><br /></p>
		<p>启动Tomcat在浏览器上输入<a href="http://localhost:8080/DBTest" target="_blank"><u><font color="#0000ff">http://localhost:8080/DBTest</font></u></a><br /><br />备注：</p>
		<p>连接池配置(Database Connection Pool (DBCP) Configurations)<br />DBCP使用的是Jakarta-Commons Database Connection Pool 要使用连接池需要如下的组件即jar文件</p>
		<p>Jakarta-Commons DBCP 1.1 对应commons-dbcp-1.1.jar。<br />Jakarta-Commons Collections 2.0 对应commons-collections.jar。<br />Jakarta-Commons Pool 1.1 对应commons-pool-1.1.jar。<br />这三个jar文件要与你的JDBC驱动程序一起放到【TOMCAT_HOME】\common\lib目录下以便让tomcat和你的web应用都能够找到。<br /><strong>7. Tomcat5.0下配置Hibernate3.0应用</strong></p>
		<p>
		</p>
		<p>
				<strong>
						<a name="_Toc112057974">
						</a>7.1 在Tomcat下建立数据库连接池，如6中所示</strong>
		</p>
		<p>
				<a name="_Toc112057975">
						<strong>7.2 在Struts应用中添加Hibernate3.0支持</strong>
				</a>
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459802.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459802.jpg" /> </a>
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500894.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104459802.jpg" /> </a>
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500293.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500293.jpg" /> </a>
		</p>
		<p>注意：hibernate.cfg.xml文件一定要存放到跟目录下，默认的也就是/web应用/src,这个部署这个应用的时候hibernate.cfg.xml才会出现在classes目录下，也就是hibernate存放配置文件的默认录入下. </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500107.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500107.jpg" /> </a>
		</p>
		<p>由于我们采用Tomcat提供的数据库连接池，所以这里我们将是用自己创建的SessionFactory类。点击完成MyEclipse会自动把Hibernate所需的的类库加入到当前应用中。接下来就是配置Hibernate连接数据库的所需的参数，以及性能参数（可选）。 </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500485.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500485.jpg" /> </a>
		</p>
		<p>既然我们选用应用服务器所提供的数据库连接池，那么在这里我们只须要指定数据源的名字：java:comp/env/jdbc/TestDB，其中jdbc/TestDB就是我们在Tomcat中配置的数据源，也就是我们上面提到的jdbc/TestDB，资源名称一定要匹配。其他的参数由于已经在Tomcat中配置过了，所以在这里就不用配置了，Dialect一定要指定跟我们数据库匹配的语言。 既然我们选用应用服务器所提供的数据库连接池，那么在这里我们只须要指定数据源的名字：java:comp/env/jdbc/TestDB，其中jdbc/TestDB就是我们在Tomcat中配置的数据源，也就是我们上面提到的jdbc/TestDB，资源名称一定要匹配。其他的参数由于已经在Tomcat中配置过了，所以在这里就不用配置了，Dialect一定要指定跟我们数据库匹配的语言。</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500841.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500841.jpg" /> </a>
		</p>
		<p>我们可以在这里配置Hibernate一些调整性能的参数（针对不同的数据库有些属性可能无效）。 </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500580.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500580.jpg" /> </a>
		</p>
		<p>在这里我们设置show_sql为true，这样在开发调试过程成控制台可以打印真正在数据库端执行的sql语句便于查找问题。其他一些属性可以参阅<a href="http://www.hibernate.org/" target="_blank"><u><font color="#0000ff">http://www.hibernate.org</font></u></a>。<br />到这里Hibernate的配置已经基本完成，下面创建SessionFactory用来和数据库进行交互（Hibernate官方文档提供）。 <br />package com.db;<br /><br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.hibernate.Session;<br />import org.hibernate.SessionFactory;<br />import org.hibernate.cfg.Configuration;<br /><br />public class HibernateUtil {<br /><br />    private static Log log = <br />LogFactory.getLog(HibernateUtil.class);<br /><br />    private static final SessionFactory sessionFactory;<br /><br />    static {<br />        try {<br />            sessionFactory = new Configuration().configure().<br />buildSessionFactory();<br />        } catch (Throwable ex) {<br />            log.error("Initial SessionFactory <br />creation failed.", ex);<br />            throw new ExceptionInInitializerError(ex);<br />        }<br />    }<br /><br />    public static final ThreadLocal session = new ThreadLocal();<br /><br />    public static Session currentSession()  {<br />        Session s = (Session) session.get();<br />        if (s == null) {<br />            s = sessionFactory.openSession();<br />            session.set(s);<br />        }<br />        return s;<br />    }<br /><br />    public static void closeSession() {<br />        Session s = (Session) session.get();<br />        if (s != null)<br />            s.close();<br />        session.set(null);<br />    }<br />}<br /></p>
		<p>后面将会提到如何使用HibernateUtil,下面建立我们所需的数据库<br />（略）我们可以使用208上的db_test_account这个数据库中的表message来测试我们的Hibernate配置是否成功。数据库样例： </p>
		<p>
				<img height="55" src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500440.jpg" width="221" />
		</p>
		<p>建表语句： </p>
		<pre class="code">CREATE TABLE `message` (              
           `Id` varchar(50) NOT NULL default '0',   
           `text` varchar(50) default NULL,    
           `nextMessage` int(4) default NULL,  
           PRIMARY KEY  (`Id`)                 
          ) TYPE=MyISAM
</pre>
		<p>创建O/R Mapping:</p>
		<p>
				<img height="249" src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104500419.jpg" width="166" />
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501351.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501351.jpg" /> </a>
		</p>
		<p>点击Edit </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501965.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501965.jpg" /> </a>
		</p>
		<p>点击New添加MySQL的驱动，保存 </p>
		<p>
				<img height="249" src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501933.jpg" width="165" />
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501809.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501809.jpg" /> </a>
		</p>
		<p>激活Database Explorer，保存。 </p>
		<p>
				<img height="100" src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501187.jpg" width="210" />
		</p>
		<p>选择Database Explorer，创建数据库链接： </p>
		<p>
				<img height="110" src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501296.jpg" width="316" />
		</p>
		<p>点击创建新的数据库,添加所需必要的参数 </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501870.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501870.jpg" /> </a>
		</p>
		<p>保存，然后右键点击该数据库选择open database，测试是否配置成功，如果不能连接查看该连接的配置参数。<br /></p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501167.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501167.jpg" /> </a>
		</p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501838.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501838.jpg" /> </a>
		</p>
		<p align="left">点击完成后MyEclipse会自动生成POJO和Map文件，并更新Hibernate的配置文件（主要是加载Map文件）。ID Generator选项可以根据你的需要进行选择，具体含义请参阅hibernate官方文档。下面建立一个测试用的jsp页面来看看Hibernate是否好用。<br />//MyJsp.jsp<br /><br />&lt;%@ page language="java" import="com.db.*" pageEncoding="UTF-8"%&gt;<br />&lt;%<br />String path = request.getContextPath();<br />String basePath = request.getScheme()+":<br />//"+request.getServerName()+":"+request.getServerPort()+path+"/";<br />%&gt;<br /><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;base href="&lt;%=basePath%&gt;"&gt;<br />    <br />    &lt;title&gt;My JSP 'MyJsp.jsp' starting page&lt;/title&gt;<br />    <br />    &lt;meta http-equiv="pragma" content="no-cache"&gt;<br />    &lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />    &lt;meta http-equiv="expires" content="0"&gt;<br />    &lt;meta http-equiv="keywords" content="<br />keyword1,keyword2,keyword3"&gt;<br />    &lt;meta http-equiv="description" content="This is my page"&gt;<br />    <br />    &lt;!--<br />    &lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;<br />    --&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />    &lt;%    <br />org.hibernate.Session s = HibernateUtil.currentSession();<br />String hql = " from Message where text='b'";<br />try {<br />org.hibernate.Query query = s.createQuery(hql);<br />java.util.List msgList = query.list();<br />hello.Message msg = (hello.Message) msgList.get(0);<br />out.println(msg.getId());<br />out.println(msg.getText());<br />out.println(msg.getNextmessage()); <br />} catch (org.hibernate.HibernateException e) {<br />e.printStackTrace();<br />} <br />HibernateUtil.closeSession(); <br />    %&gt;<br />  &lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<p>正常的结果如下： </p>
		<p>
				<a href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501444.jpg" target="_blank">
						<img src="http://java.chinaitlab.com/UploadFiles_8734/200602/20060208104501444.jpg" /> </a>
		</p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/52842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-06-14 20:43 <a href="http://www.blogjava.net/liaojiyong/archive/2006/06/14/52842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 3 插件大全</title><link>http://www.blogjava.net/liaojiyong/archive/2006/05/24/47776.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 24 May 2006 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/05/24/47776.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/47776.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/05/24/47776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/47776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/47776.html</trackback:ping><description><![CDATA[
		<h2>1.MyEclipse  J2EE开发插件，支持SERVLET/JSP/EJB/数据库操纵等<br /><a href="http://www.myeclipseide.com/"><font color="#4a664d">www.myeclipseide.com</font></a></h2>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>2.Properties Editor  编辑java的属性文件，并可以自动存盘为Unicode格式<br /><a href="http://propedit.sourceforge.jp/index_en.html"><font color="#4a664d">http://propedit.sourceforge.jp/index_en.html</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>3.Colorer Take  为上百种类型的文件按语法着色<br /><a href="http://colorer.sourceforge.net/"><font color="#4a664d">http://colorer.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>4.XMLBuddy 编辑xml文件<br /><a href="http://www.xmlbuddy.com/"><font color="#4a664d">www.xmlbuddy.com</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>5.Code Folding  加入多种代码折叠功能（比eclipse自带的更多）<br /><a href="http://www.coffee-bytes.com/servlet/PlatformSupport"><font color="#4a664d">http://www.coffee-bytes.com/servlet/PlatformSupport</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>6.Easy Explorer  从eclipse中访问选定文件、目录所在的文件夹<br /><a href="http://easystruts.sourceforge.net/"><font color="#4a664d">http://easystruts.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>7.Fat Jar 打包插件，可以方便的完成各种打包任务，可以包含外部的包等<br /><a href="http://fjep.sourceforge.net/"><font color="#4a664d">http://fjep.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>8.RegEx Test 测试正则表达式<br /><a href="http://brosinski.com/stephan/archives/000028.php"><font color="#4a664d">http://brosinski.com/stephan/archives/000028.php</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>9.JasperAssistant 报表插件（强，要钱的）<br /><a href="http://www.jasperassistant.com/"><font color="#4a664d">http://www.jasperassistant.com/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>10.Jigloo GUI Builder ＪＡＶＡ的ＧＵＩ编辑插件<br /><a href="http://cloudgarden.com/jigloo/"><font color="#4a664d">http://cloudgarden.com/jigloo/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>11.Profiler 性能跟踪、测量工具，能跟踪、测量ＢＳ程序<br /><a href="http://sourceforge.net/projects/eclipsecolorer/"><font color="#4a664d">http://sourceforge.net/projects/eclipsecolorer/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>12.AdvanQas 提供对if/else等条件语句的提示和快捷帮助（自动更改结构等）<br /><a href="http://eclipsecolorer.sourceforge.net/advanqas/index.html"><font color="#4a664d">http://eclipsecolorer.sourceforge.net/advanqas/index.html</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>13.Log4E     Log4j插件，提供各种和Log4j相关的任务，如为方法、类添加一个logger等<br /><a href="http://log4e.jayefem.de/index.php/Main_Page"><font color="#4a664d">http://log4e.jayefem.de/index.php/Main_Page</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>14.VSSPlugin VSS插件<br /><a href="http://sourceforge.net/projects/vssplugin"><font color="#4a664d">http://sourceforge.net/projects/vssplugin</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>15.Implementors   提供跳转到一个方法的实现类，而不是接中的功能（实用!）<br /><a href="http://eclipse-tools.sourceforge.net/implementors/"><font color="#4a664d">http://eclipse-tools.sourceforge.net/implementors/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>16.Call Hierarchy 显示一个方法的调用层次（被哪些方法调，调了哪些方法）<br /><a href="http://eclipse-tools.sourceforge.net/call-hierarchy/index.html"><font color="#4a664d">http://eclipse-tools.sourceforge.net/call-hierarchy/index.html</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>17.EclipseTidy 检查和格式化HTML/XML文件<br /><a href="http://eclipsetidy.sourceforge.net/"><font color="#4a664d">http://eclipsetidy.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>18.Checkclipse 检查代码的风格、写法是否符合规范<br /><a href="http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm"><font color="#4a664d">http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>19.Hibernate Synchronizer Hibernate插件，自动映射等<br /><a href="http://www.binamics.com/hibernatesync/"><font color="#4a664d">http://www.binamics.com/hibernatesync/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>20.VeloEclipse  Velocity插件<br /><a href="http://propsorter.sourceforge.net/"><font color="#4a664d">http://propsorter.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>21.EditorList   方便的列出所有打开的Editor<br /><a href="http://editorlist.sourceforge.net/"><font color="#4a664d">http://editorlist.sourceforge.net/</font></a></div>
		<div>
				<font color="#4a664d">
				</font> </div>
		<div>22.MemoryManager 内存占用率的监视<br /><a href="http://cloudgarden.com/memorymanager/"><font color="#4a664d">http://cloudgarden.com/memorymanager/</font></a><br /><br /><br /><br /><br /><h2><a name="section-EclipsePlugins-%E6%8F%92%E4%BB%B6%E5%88%97%E8%A1%A8%E7%BD%91%E7%AB%99">插件列表网站</a></h2><ul><li>http://www.eclipse-plugins.info/eclipse/index.jsp </li></ul>Eclipse 正牌插件专门网站，有插件分类，top rated统计，以及用户反馈信息。 这些足够你少走弯路，最快地找到最好胜的插件了。 
<p></p><h2><a name="section-EclipsePlugins-%E6%8E%A8%E8%8D%90%E6%8F%92%E4%BB%B6">推荐插件</a></h2><ul><li><a class="interwiki" href="http://sourceforge.net/projects/struts/" target="_blank">Eclipse 插件集成</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul>在 Struts Applications 子项目下，有人整理了这个东东。即它把 eclipse 常用的开源工具打包了，不需要自己再麻烦去安装整理了。真棒的工作。 
<ul><li><a class="interwiki" href="http://eclipse-tools.sourceforge.net/index.html" target="_blank">Eclipse-tools</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul>sf.net 的一个旨在开发 eclipse 插件的项目。 有几个小巧实用的工具了。 虽小，但看起来的确实用。比如，你想看看某个类或者方法的实现，一般是 ctrl ＋ 左键 ，点击即打开这个类或者方法。 但如果是接口时，只是到达接口而已，不能解决问题。我实际应用过程中就遇到这个问题。 没有想到就有真的做了这个插件。 
<h3><a name="section-EclipsePlugins-J2EE">J2EE</a></h3><ul><li><a class="interwiki" href="http://www.exadel.com/products_exadelstudio.htm" target="_blank">Exadel Studio</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 自由版本。 </li></ul><br />支持对于 Struts, JSF, Spring, Hibernate <br /><br /><img class="inline" alt="http://www.exadel.com/images/pages/E4W/struts-diagram.gif" src="http://www.exadel.com/images/pages/E4W/struts-diagram.gif" /><p></p><p></p><ul><li><a class="interwiki" href="http://forge.objectweb.org/projects/lomboz" target="_blank">Lomboz</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 开源 </li></ul>J2EE 开发中用得最火的插件，关键是更新速度很快，基本上 eclipse IDE 有新版本，几天之内他就可以 release 版本。新版本功能也改进不少，现在也可以直接在 JSP 中显示标签的提示了，甚至语法错误提示。（我一直用这个） <br />随着eclipse的发展，现在的LOMBOZ插件越来越大了。但是速度成了主要的问题。和Myeclipse、IBM的Eclipse Web Tools Platform相比，LOMBOZ的技术有点落后了。Myeclipse是把整个项目的JSP先编译了，而IBM也是第一次把所有的JSP加入索引。虽然每次打开的时候，也慢一些，但是并不随着工程的变大，而出现速度成反比的现象。现在用lomboz 打开一个大的项目中的JSP文件的话，一般人已经受不了它的速度了。 
<p></p><p></p><ul><li><a class="external" href="http://www.eclipse.org/webtools/initial-contribution/IBM/Getting%20Started.html">Eclipse Web Tools Platform</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> IBM为eclipse贡献的好东东！ </li></ul>这个绝对是一个重量级的J2EE的插件，很多论坛上都有它的介绍，在此也不多说了。只说几个与众不同的地方，它是一个唯一打开JSP，能解释里面的JAVA，HTML，CSS，JS，TLD的编辑器，也是唯一能支持JAVA里的CTRL+鼠标单击打开相应类，鼠标停住显示JAVADOC的编辑器。IBM的东西确实不同凡响，就是体积大了些，不但用到EMF，而且还用GEF，XSD等项目，至于里面的XML可视化编辑，WEB SERVICE.....偶也用不着，幸好也有这样一位大侠Lonsen（在此表示感谢）爱好和偶一样，把这个插件减肥了。<a class="external" href="http://www.matrix.org.cn/forum_view.asp?forum_id=25&amp;view_id=11972">Eclipse Web Tools Platform减肥记</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 这样改过之后，这个插件又FREE！又强大，速度比LOMBOZ快，首先推荐！<b>绝绝对对的5星级！！！</b>快快DOWN下来，加入自己的eclipse插件宝库吧! 
<p></p><p></p><ul><li><a class="interwiki" href="http://www.myeclipseide.com/" target="_blank">MyEclipse</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 开始有注册机出现 </li></ul>虽然 <a class="interwiki" href="http://www.myeclipseide.com/" target="_blank">MyEclipse</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 是个死要钱的东东，不过功能确实是不赖啊，尤其让我无法放手的就是那个自动发布功能，随手保存，随时发布。这个发布可不是 ant 的那种整站发布，而是针对某些类或是 jsp 进行发布，虽说只是一个简单的 copy，可确实方便了很多。<br />里面使用的ＸＭＬ编辑器，XML MEN也可以说是一个精品的插件，但是在当前的XML插件满天飞的情况而言，优点也不多了。不过，那个 struts 支持倒是使用了这个功能，它不但把 easyStruts 集成进来，而且还加入了图形（流程）化struts-config.xml的功能，还支持除错的功能，这个功能虽然不稳定，但是必竟支持这个功能的插件也仅此一位呀。 <br /><br />如果除其不稳定因素外，这个STRUTS插件已经是最好用的插件之一了，不但保持了，xslt这个目录的模版文件的支持，preferences.ini这个配置文件可以修改生成文件的目录，这些easySTRUTS原有的优点以外，而且在稳定性上也有了明显的改善！<b>只是这个插件唯一让你受不了的就是，它必须使用它自身带的GEF插件包</b>，而且你还不能安装比它新的GEF的插件！！！这意味着如果你的其它插件，想使用GEF的话，能利用它的版本的，就用它的版本，不然，就意味着你永远不能使用其它使用GEF的插件！！！ <br /><br />2004年10月现在的事情变化太快了昨天刚刚不能用的功能可能今天就实现了,现在的Myeclipse里面的STRUTS的功能也真的是太强大了,我所知道的STRUTS类的插件应该具有的功能,它几乎都有了! <br />现在Myeclipse3.8.2全面集IBM的J2EE插件所以主要的自己的产品就那个STRUTS的图形化功能了,这回经过细致的加工后无论在界面上还是在功能上都可以说是第一棒的了只是其附带的JSP的预览的功能好象还是好些问题和WSAD相比好象是有点水土不服比竟IBM的这套工具强大而又不易于操作。下面就是这个插件的美美样子 PL的一塌糊涂 <br /><br /><img class="inline" alt="http://www.myeclipseide.com/modules/ContentExpress/img_repository/docs/sm_overview.gif" src="http://www.myeclipseide.com/modules/ContentExpress/img_repository/docs/sm_overview.gif" /><p></p><p></p><h3><a name="section-EclipsePlugins-Struts">Struts</a></h3><ul><li><a class="interwiki" href="http://www.jamesholmes.com/struts/console/" target="_blank">Struts Console</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /><u>开源</u><a href="http://www.matrix.org.cn/subjects/Edit.jsp?page=%E5%BC%80%E6%BA%90">?</a></li></ul>最老牌的 Struts 插件了，支持的平台很多。同时支持eclipse2.1和3.0!!!而且一直在维护更新。我还是认为它是最好用的 Struts 插件。新版本也支持 Eclipse IDE 的最新版本。其实对于 Struts 关键是完善地支持配置文件地图形化就够了，其他关系不大。这个东东对Struts配置文件支持得很完善。另外他也可以相对独立地作为一个程序运行，我现在是这种方式在用它。 
<ul><li>不得不提的easy STRUTS </li></ul>几乎所有的网站说到STRUTS插件的时候都会提到它，它的功能也的确不赖呀。FORM的模板的支持，生成目录..等配置文件的支持。真的可以说是STRUTS的一个非常成功的插件。只是网友在使用中，发现竟然有把Struts-config.xml文件信息丢失的现象，这个插件可以说一下子从天堂走向了...但是，好在myeclipse把它集成了，修正了一些BUG。但与此也带来一些新的BUG！:( 软件是不是总是这样？？不过，随着FILE Model插件的强大，easy struts吸引人的地方越来越少了，甚至于它的模板不是基于velocity的,也成为它必须要重构的一个因素了。 
<ul><li>新星<a class="external" href="http://www.m7.com/">M7</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul>这个东东可能用的人并不多一眼看上去好象也没有什么强大的功能.但实际上,它的的确确是唯一全支持STRUTS的插件.它的支持不仅仅在于struts-config文件的支持,它还可以支持JSP中Formbean里面的属性!!!!这回当Formbean里面属性一大堆的时候不怕写错了,嘿嘿但目前好象没有出现破解版本. 
<p></p><p></p><h3><a name="section-EclipsePlugins-%E4%BB%A3%E7%A0%81%E8%BE%85%E5%8A%A9">代码辅助</a></h3><ul><li><a class="interwiki" href="http://jalopy.sourceforge.net/" target="_blank">JALOPY</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul>有几篇综合介绍文章，请参考：<a class="wikipage" href="http://www.matrix.org.cn/subjects/Wiki.jsp?page=EclipseDocs">Eclipse介绍文章页</a><dl><dt></dt><dd>Jalopy功能确实不错，也是我在使用eclipse2系列时必备之一，不过在eclipse3里面，格式化有了长足的进步，个人认为功能已经不弱于Jalopy了 ——郁也风 </dd></dl><ul><li><a class="interwiki" href="http://beust.com/doclipse/" target="_blank">Doclipse - A JavaDoc Tag Plug-in for Eclipse</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul>Doclipse is an Eclipse plug-in to help you write Java source files with Javadoc tags, either for documentation purposes or to be processed by a tool such as EJBGen or XDoclet. New tags can be added to the plug-in by writing XML files defining the new tags and their attributes. 
<p></p><p></p><h3><a name="section-EclipsePlugins-XML">XML</a></h3><ul><li><a class="interwiki" href="http://www.xmlbuddy.com/" target="_blank">XML Buddy</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /><u>标准版免费</u><a href="http://www.matrix.org.cn/subjects/Edit.jsp?page=%E6%A0%87%E5%87%86%E7%89%88%E5%85%8D%E8%B4%B9">?</a></li></ul>排名最高的 XML 插件，比较好用。标准版免费开放，专业版需要付费。 
<p></p><p></p><h3><a name="section-EclipsePlugins-Hibernate">Hibernate</a></h3><ul><li><a class="interwiki" href="http://hibernator.sourceforge.net/" target="_blank">Hibernator</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; 
</li><li><a class="interwiki" href="http://forum.javaeye.com/download/jlinux/" target="_blank">Tanghan</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; </li></ul>国人开发的一个 Hibernte 辅助开发工具。很好用。主要功能是从数据库表中自动建立 hbm 文件。也可以从POJO创建hbm文件,但是默认ID的类型是hilo.long, 从这个hbm 产生数据库schema的时候会出错。 
<ul><li><a class="external" href="http://www.binamics.com/hibernatesynch">Hibernate Synchronizer</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; </li></ul>Hibernate Synchronizer可以保证hbm和java文件的同步。 
<ul><li><a class="external" href="http://www.exadel.com/products_ORMstudio.htm">Exadel ORM Studio Hibernate Edition</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /></li></ul><img class="inline" alt="http://www.exadel.com/images/pages/orm/orm.gif" src="http://www.exadel.com/images/pages/orm/orm.gif" /><p></p><p></p><h3><a name="section-EclipsePlugins-GUI%E7%9B%B8%E5%85%B3">GUI 相关</a></h3><ul><li><a class="interwiki" href="http://www.cloudgarden.com/jigloo/" target="_blank">Jigloo SWT/Swing GUI Builder</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;有免费版本&gt; </li></ul><p></p><p></p><h3><a name="section-EclipsePlugins-%E5%85%B6%E5%AE%83Util%E6%8F%92%E4%BB%B6">其它 Util 插件</a></h3><ul><li><a class="interwiki" href="http://log4e.jayefem.de/index.php/Main_Page" target="_blank">Log4E</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; </li></ul>帮助你在代码里使用 log4j 写 log 
<ul><li><a class="interwiki" href="http://commons4e.berlios.de/" target="_blank">Commons4e</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; 
</li><li><a class="interwiki" href="http://andrei.gmxhome.de/anyedit/index.html" target="_blank">AnyEdit</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;开源&gt; </li></ul>对 eclipse edit 做些功能补充 
<ul><li><a class="interwiki" href="http://www.visual-paradigm.com/sdeec.php" target="_blank">Visual Paradigm SDE for Eclipse</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;有免费版本&gt; 
</li><li><a class="interwiki" href="http://www.binamics.com/mavenworkshop/" target="_blank">Maven Workshop</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;免费&gt; </li></ul><p></p><p>＃<a class="interwiki" href="http://mevenide.codehaus.org/" target="_blank">meven</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> 免费，另一个极好的maven环境! </p><p></p><ul><li><a class="interwiki" href="http://www.guh-software.de/jinto_en.html/" target="_blank">JInto</a><img class="outlink" alt="" src="http://www.matrix.org.cn/subjects/images/out.png" /> &lt;免费&gt; </li></ul>I18n资源文件编写插件，超好用 </div>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/47776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-05-24 10:58 <a href="http://www.blogjava.net/liaojiyong/archive/2006/05/24/47776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>