﻿<?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-自大的人只想着怎么把面子保住，自强的人只想着怎么把事办好！-文章分类-Eclipse的相关</title><link>http://www.blogjava.net/mlzry0612/category/10857.html</link><description>自大的人只想着怎么把面子保住，自强的人只想着怎么把事办好！</description><language>zh-cn</language><lastBuildDate>Wed, 12 Jan 2011 03:56:31 GMT</lastBuildDate><pubDate>Wed, 12 Jan 2011 03:56:31 GMT</pubDate><ttl>60</ttl><item><title>PDE build   http://www.eclipse.org/articles/Article-PDE-Automation/automation.html</title><link>http://www.blogjava.net/mlzry0612/articles/342780.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Tue, 11 Jan 2011 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/342780.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/342780.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/342780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/342780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/342780.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;Copyright &#169; 2005 Markus Barchfeld                        &nbsp;Eclipse Corner Article            &nbsp;Build and Test Automation for plug-ins and features...&nbsp;&nbsp;<a href='http://www.blogjava.net/mlzry0612/articles/342780.html'>阅读全文</a><img src ="http://www.blogjava.net/mlzry0612/aggbug/342780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2011-01-11 17:06 <a href="http://www.blogjava.net/mlzry0612/articles/342780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>For extension point definition's variable attribute extension point.</title><link>http://www.blogjava.net/mlzry0612/articles/335091.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Thu, 14 Oct 2010 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/335091.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/335091.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/335091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/335091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/335091.html</trackback:ping><description><![CDATA[<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">&lt;extension</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">point=</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:green">"org.eclipse.core.expressions.propertyTesters"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:navy">&gt;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">&lt;propertyTester</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">class=</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:green">"</span><u><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;color:black;background:blue;mso-highlight:
blue">com.ebay.tools.vjet2.internal.debug.property.LaunchPropertyTester</span></u><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:green">"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">id=</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:green">"com.ebay.tools.vjet2.debug.property.launch"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">namespace=</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:green">"com.ebay.tools.vjet2.debug"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">properties=</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:green">"launchJS,launchHTML"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">type=</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:green">"org.eclipse.core.runtime.IAdaptable"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:navy">&gt;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:navy">&lt;/propertyTester&gt;</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black">&nbsp;&nbsp; </span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:navy">&lt;/extension&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:navy"><br />
</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:navy"><br />
</span></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;">Specified class should be extends PropertyTester and implement related methods.</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;"><br />
</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;">LaunchPropertyTester extends PropertyTester {</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;"><br />
</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;"><br />
</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;"><br />
</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;"><br />
</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px;">Others services register.</span></font></p>
<p class="MsoNormal"><font color="#000080" face="'Courier New'" size="3"><span style="font-size: 13px; "><span style="color: #000000; font-family: verdana, nsimsun, sans-serif; font-size: 12px; line-height: 19px; ">
</span></span></font></p>
<font color="#000080" face="'Courier New'" size="3">
<pre class="displaycode" style="margin-top: 0px; margin-bottom: 0px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 11px; ">IFocusService focusService =
(IFocusService) PlatformUI.getWorkbench()
.getService(IFocusService.class);
focusService.addFocusTracker(text, "textControlId");
</pre>
<pre class="displaycode" style="margin-top: 0px; margin-bottom: 0px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 11px; "><br />
</pre>
<pre class="displaycode" style="margin-top: 0px; margin-bottom: 0px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 11px; "><br />
</pre>
<pre class="displaycode" style="margin-top: 0px; margin-bottom: 0px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 11px; ">All variables collected in ISources class, User can find related variables in this class.</pre>
</font>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/335091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2010-10-14 10:11 <a href="http://www.blogjava.net/mlzry0612/articles/335091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RCP 文件路径问题 </title><link>http://www.blogjava.net/mlzry0612/articles/332747.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Fri, 24 Sep 2010 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/332747.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/332747.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/332747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/332747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/332747.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">终于找到直接可以用的了</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span>
<div class="dp-highlighter" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 18px; ">
<div class="bar">
<div class="tools" style="padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: black; font-weight: bold; ">Java代码&nbsp;<embed src="http://zttcc.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%09%09%09%09%09path%20%3D%20FileLocator.toFileURL(%0A%09%09%09%09%09%09%09Platform.getBundle(IAppConstants.APPLICATION_ID)%0A%09%09%09%09%09%09%09%09%09.getEntry(%22%22)).getPath().toString()%3B" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div>
</div>
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span style="color: black; ">path&nbsp;=&nbsp;FileLocator.toFileURL(&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Platform.getBundle(IAppConstants.APPLICATION_ID)&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getEntry(<span class="string" style="color: blue; ">""</span><span style="color: black; ">)).getPath().toString();&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><strong style="font-weight: bold; ">RCP 文件路径问题</strong></span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">String path =FileLocator.toFileURL(Platform.getBundle("工程名").getEntry("")).getPath</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">得到eclipse rcp plugin 内目录文件绝对路径的方法</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import java.io.IOException;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import java.net.URL;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import org.eclipse.core.runtime.FileLocator;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import org.eclipse.core.runtime.Platform;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import org.osgi.framework.Bundle;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import com.work.base.exception.DataException;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import com.work.view.Activator;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">public class BundlePathUtil {</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; public static String getRealPath(String bundleID, String entry)</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws DataException {</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL urlentry;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strEntry;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bundle bundle = Platform.getBundle(bundleID);</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bundle==null)</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new DataException("请检查文件的路径",new NullPointerException());</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get path URL</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlentry = bundle.getEntry(entry);</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (urlentry==null)</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new DataException("请检查文件的路径",new NullPointerException());</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strEntry = FileLocator.toFileURL(urlentry).getPath();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e1) {</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new DataException("请检查文件的路径", e1);</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strEntry;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; }</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; public static String getPluginPath(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Activator.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">}</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">另外，获取插件/rcp 的workspace的路径：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">Platform.getInstanceLocation().getURL().getPath()</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><strong style="font-weight: bold; ">从插件/RCP中取得文件路径的方法</strong></span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">最近社区里问这个问题的人特别多，所以在这里将自己用到的几个方法写出来。假如以后还有其他的方法，会进行更新。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">从插件中获得绝对路径：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; AaaaPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">通过文件得到Project：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IProject project = ((IFile)o).getProject();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">通过文件得到全路径：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">得到整个Workspace的根：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">从根来查找资源：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IResource resource = root.findMember(new Path(containerName));</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">从Bundle来查找资源：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">Bundle bundle = Platform.getBundle(pluginId);</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">URL fullPathString = BundleUtility.find(bundle, filePath);</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">得到Appliaction workspace：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">得到runtimeworkspace：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">Platform.getInstanceLocation().getURL().getPath();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">从编辑器来获得编辑文件：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IEditorInput input = editor.getEditorInput();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">if(input instanceof IFileEditorInput){</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">IFile file = ((IFileEditorInput)input).getFile();</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">}</span>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/332747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2010-09-24 10:59 <a href="http://www.blogjava.net/mlzry0612/articles/332747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Simplify Eclipse classpaths using classpath containers</title><link>http://www.blogjava.net/mlzry0612/articles/331330.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Tue, 07 Sep 2010 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/331330.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/331330.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/331330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/331330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/331330.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Summary:&nbsp; Eclipse classpath containers are an organized, user-friendly way to manage Java&#8482; libraries in Eclipse. Since a group of libraries can be referenced as one abstract name, they can ...&nbsp;&nbsp;<a href='http://www.blogjava.net/mlzry0612/articles/331330.html'>阅读全文</a><img src ="http://www.blogjava.net/mlzry0612/aggbug/331330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2010-09-07 17:37 <a href="http://www.blogjava.net/mlzry0612/articles/331330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extending WTP Using Project Facets</title><link>http://www.blogjava.net/mlzry0612/articles/327766.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Mon, 02 Aug 2010 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/327766.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/327766.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/327766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/327766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/327766.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Extending WTP Using Project FacetsSummaryThe Faceted Project Framework allows the plugin developer to think of Web Tools Platform (WTP) projects as composed of units of functionality, otherwise kn...&nbsp;&nbsp;<a href='http://www.blogjava.net/mlzry0612/articles/327766.html'>阅读全文</a><img src ="http://www.blogjava.net/mlzry0612/aggbug/327766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2010-08-02 17:14 <a href="http://www.blogjava.net/mlzry0612/articles/327766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse code template</title><link>http://www.blogjava.net/mlzry0612/articles/305240.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 09 Dec 2009 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/305240.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/305240.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/305240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/305240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/305240.html</trackback:ping><description><![CDATA[<font style="background-color: #cbe7cb">public class ScriptTemplateContext extends DocumentTemplateContext {</font>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/305240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2009-12-09 10:12 <a href="http://www.blogjava.net/mlzry0612/articles/305240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.eclipse.core.expressions.definitions point at Eclipse 3.3</title><link>http://www.blogjava.net/mlzry0612/articles/301712.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Mon, 09 Nov 2009 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/301712.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/301712.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/301712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/301712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/301712.html</trackback:ping><description><![CDATA[<font style="background-color: #cbe7cb">&lt;extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point="org.eclipse.core.expressions.definitions"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;definition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="<strong>com.ebay.tools.vjet2.ui.inDltk</strong>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;with<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; variable="activePartId"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;or&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;equals value="org.eclipse.jdt.ui.PackageExplorer"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;equals value="org.eclipse.jdt.ui.ClassFileEditor"/&gt;<br />
<br />
<font style="background-color: #cbe7cb">&nbsp;&nbsp; &lt;extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point="org.eclipse.ui.handlers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;handler<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="com.ebay.tools.vjet2.internal.ui.actions.VjoOpenTypeHandler"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commandId="<strong>org.eclipse.jdt.ui.navigate.open.type</strong>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;activeWhen&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;reference<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; definitionId="<strong>com.ebay.tools.vjet2.ui.inDltk</strong>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/reference&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/activeWhen&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/handler&gt;<br />
&nbsp;&nbsp; &lt;/extension&gt;<br />
<br />
<br />
<font style="background-color: #cbe7cb">&nbsp;&nbsp; &lt;extension point="org.eclipse.ui.actionSets"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;actionSet label="%VjetActionSet.label" description="%VjetActionSet.description" visible="false" id="com.ebay.tools.vjet2.ui.VjetActionSet"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action class="com.ebay.tools.vjet2.ui.actions.VjoOpenTypeAction" <strong>definitionId="org.eclipse.jdt.ui.navigate.open.type</strong>" icon="platform:/plugin/org.eclipse.dltk.ui/icons/full/etool16/opentype.gif" id="com.ebay.tools.vjet2.ui.openType" label="%OpenTypeAction.label" menubarPath="navigate/open.ext2" tooltip="%OpenTypeAction.tooltip"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/actionSet&gt;<br />
<br />
<br />
Execute sequence: Action will be actived --&gt;Find definediionID:<strong>org.eclipse.jdt.ui.navigate.open.type at</strong> a handler, --&gt;handler will be actived when definited satisfied<br />
<br />
It's very useful when cut event when override old version codes or 3rd plugin.<br />
</font></font></font>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/301712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2009-11-09 15:42 <a href="http://www.blogjava.net/mlzry0612/articles/301712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式对话框</title><link>http://www.blogjava.net/mlzry0612/articles/290209.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Fri, 07 Aug 2009 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/290209.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/290209.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/290209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/290209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/290209.html</trackback:ping><description><![CDATA[&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;childShellTest(Shell&nbsp;shell){ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//非模态对话框 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChildShell&nbsp;child1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ChildShell(shell); &nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//模式对话框&nbsp;--&nbsp;只禁用父窗体 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChildShell&nbsp;child2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ChildShell(shell,SWT.DIALOG_TRIM|SWT.APPLICATION_MODAL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//模式对话框&nbsp;--&nbsp;禁用系统窗体 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChildShell&nbsp;child3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ChildShell(shell,SWT.DIALOG_TRIM|SWT.SYSTEM_MODAL);&nbsp; &nbsp;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/290209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2009-08-07 12:25 <a href="http://www.blogjava.net/mlzry0612/articles/290209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quick Fix implement</title><link>http://www.blogjava.net/mlzry0612/articles/281010.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Tue, 09 Jun 2009 12:46:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/281010.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/281010.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/281010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/281010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/281010.html</trackback:ping><description><![CDATA[<p>For eclipse quick fix. There are lots of articles introduce how to add a marker but no reference to how to implement the <font style="background-color: #cbe7cb">Proposal . <br />
Now i will give the solution:<br />
First. Add the marker. It's the sample one:<br />
1. Declare the marker extension point :&nbsp;<font style="background-color: #cbe7cb">org.eclipse.core.resources.markers</font>, //Here should be clear: there are some args should be declared in pulg.in. xml file. which will be&nbsp;used in your code.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and implement the <font style="background-color: #cbe7cb">IMarkerResolutionGenerator2</font> interface. //Generate the generator.<br />
2. User IResource.createMarker(....) API to create the marker. // Here will give your delcared marker type.<br />
3. Your editor must have a configure file which extends from <font style="background-color: #cbe7cb">SourceViewerConfiguration</font>. There is a important API for our quick fix function is: <font style="background-color: #cbe7cb">getQuickAssistAssistant();<br />
4. So you should implement the <font style="background-color: #cbe7cb">IQuickAssistAssistant</font>, ( I extends from <font style="background-color: #cbe7cb">JavaCorrectionAssistant</font> the in my code) and regesit it at step 4.<br />
5. The class implement the IQuickAssistAssistant which will set a&nbsp;<font style="background-color: #cbe7cb">IQuickAssistProcessor instance for execute qiuck fix. API is <font style="background-color: #cbe7cb">setQuickAssistProcessor();</font></font><br />
</font>6. in IQuickAssistAssistant&nbsp; interface the most important API is <font style="background-color: #cbe7cb">computeQuickAssistProposals(IQuickAssistInvocationContext). which will be return <font style="background-color: #cbe7cb">ICompletionProposal[]</font>&nbsp; this API is used to finish your business.<br />
7. So some body will ask that when we will use the eclipse extension point : <font style="background-color: #cbe7cb">org.eclipse.ui.ide.markerResolution</font><br />
&nbsp;&nbsp; Now. see the&nbsp;&nbsp;<font style="background-color: #cbe7cb">ICompletionProposal[]</font>&nbsp; return type at step 6? There have a implement class called <font style="background-color: #cbe7cb">MarkerResolutionProposal</font>(), Let 's say it's constructor<br />
<font style="background-color: #cbe7cb">&nbsp;public MarkerResolutionProposal(IMarkerResolution resolution, IMarker marker)</font><br />
&nbsp;See here the <font style="background-color: #cbe7cb">org.eclipse.ui.ide.markerResolution extension point is used here. but the MarkerResolutionProposal seems only used in java syntax. <br />
So if your have another grammer. please new a interface to extends from <font style="background-color: #cbe7cb">ICompletionProposal</font>.<br />
8. The details implement will be finished in class which implement IMarkerResolution. at run() API<br />
<br />
If i have some time i will update some class diagram for this function. <br />
</font><br />
</font></font></p>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/281010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2009-06-09 20:46 <a href="http://www.blogjava.net/mlzry0612/articles/281010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.3新特性之RCP</title><link>http://www.blogjava.net/mlzry0612/articles/231984.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 01 Oct 2008 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/231984.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/231984.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/231984.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/231984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/231984.html</trackback:ping><description><![CDATA[Eclipse3.3加入了很多超Cool的功能，我的文章主要是针对于RCP开发做介绍的，JDT之类的新特性，大家自己体会吧!<br />
&nbsp;&nbsp;&nbsp; 新特性之一：Viewer和Editor的最大化最小化效果变的很Cool；<br />
&nbsp;&nbsp;&nbsp; 这个新特性，可能对开发人员来说并没有什么稀奇的，有这个和没有这个的区别不大。但是对于RCP的开发，这个是一个非常吸引客户眼球的地方，他们会瞪大眼睛看，然后自己把玩，最后要求为自己开发软件的其他软件都加入此功能。o(&#8745;_&#8745;)o...哈哈~~够他们忙活的了！<br />
&nbsp;&nbsp;&nbsp; 新特性之二：当Editor最大化以后，其他的Viewer将以新的列表方式继续出现在界面上；<br />
&nbsp;&nbsp;&nbsp; 这个功能，不好解释，看看抓图：<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/eclipse33a.jpg" /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/eclipse33b.jpg" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很Cool吧，客户一定喜欢死了~<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新特性之三：对Forms加入了错误信息验证；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以前的版本中，Form使没有错误验证的，现在则加入了Forms的验证，看来Form的使用可以更快的深入人心了~<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/forms-enhancements.png" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新特性之四：增强Porperties View的现实效果；<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/tabbed-properties-view.png" /><br />
&nbsp;&nbsp;&nbsp;&nbsp; 虽然我不喜欢在项目中使用PorpertiesView（配置起来太麻烦，不适合普通开发人员使用），但是还是感谢Eclipse的开发团队此次对PorpertiesView的增强。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 新特性之五：可控制的启动画面；<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在Eclipse3.3中提供了新的扩展点<font face="Courier New">org.eclipse.osgi.service.runnable.StartupMonitor，用于在启动时使用SWT的代码。<br />
&nbsp;&nbsp;新特性之六：高级的Tooltips；<br />
&nbsp;&nbsp;提供了新的扩展点：org.eclipse.jface.window.Tooltip用于创建更为高级的Tooltips；<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/tooltip.png" /><br />
&nbsp;&nbsp;新特性之七：SWT增加时间日期选择器；<br />
&nbsp;&nbsp;:-)，这个可能是大家早都知道的秘密了~真想不通，时间和日期选择器早都应该提供了，为什么到现在才拿出来！<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/datetime-time.png" /></font>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/datetime-calendar.png" /><br />
&nbsp;&nbsp;&nbsp; 新特性之八：新增加2种启动界面；<br />
Interactive: A simulated log-in session&nbsp; 使用一个程序登陆界面启动<br />
Browser: An embedded HTML browser&nbsp; 使用一个Html作为登陆界面<br />
Extensible: A dynamic set of image contributions 使用一张图片作为启动界面<br />
&nbsp;&nbsp;&nbsp; 在新的PDE中可以对一个product选择使用那一种启动界面启动，这个新功能的增加是非常有意义的，它使得RCP应用更加的人性化，不用再在系统启动中弹出对话框了，让客户更加放心的选择基于RCP的产品了~<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/leeguannan/splash-templates.png" /></p>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/231984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-10-01 13:30 <a href="http://www.blogjava.net/mlzry0612/articles/231984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.3新特性体验之最大化最小化改进 </title><link>http://www.blogjava.net/mlzry0612/articles/231983.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 01 Oct 2008 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/231983.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/231983.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/231983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/231983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/231983.html</trackback:ping><description><![CDATA[<h5 class="posthead pageTitle">&nbsp;</h5>
<div class="postText"><span style="font-family: Arial">&nbsp;&nbsp;&nbsp; 昨天晚上写了Eclipse3.3的新特性，心中异常兴奋，想快点用到现有的产品开发框架中，于是开始把玩最大化最小化的新特性。<br />
&nbsp;&nbsp; 研究了整整一下午也没有发现有什么方法可以设置一个Viewer让它在透视图启动的时候自己做最小化，其实刚开始思路是不对的，不应该考虑让Viewer自己有什么变化；Viewer的大小，位置都是在透视图中设置的，它自己是没有任何能力干涉的。<br />
&nbsp;&nbsp; 在Eclipse的新闻组中咨询了一下PW告诉我org.eclipse.ui.perspectiveExtensions扩展点，提供了定义Viewer最小化的属性，而且这个属性是Eclipse3.3新增的，只要有就好办~有样学样！<br />
&nbsp;&nbsp; 拉出来PerspectiveExtension管理注册代码读读就明白了~原来：<br />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-family: Arial"><span style="color: #008080">1</span><img id="Codehighlighter1_53_58_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_58_Open_Text.style.display='none'; Codehighlighter1_53_58_Closed_Image.style.display='inline'; Codehighlighter1_53_58_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_53_58_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_53_58_Closed_Text.style.display='none'; Codehighlighter1_53_58_Open_Image.style.display='inline'; Codehighlighter1_53_58_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #000000">&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;createInitialLayout(IPageLayout&nbsp;layout)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_53_58_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span></span><span id="Codehighlighter1_53_58_Open_Text"><span style="font-family: Arial"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<span style="font-family: Arial">&nbsp; 透视图类中的IPageLayout的实现类是PageLayout，晕死，在Eclipse的API中竟然没有人告诉我~<br />
&nbsp; 于是只需要这样就可以让一个Viewer在透视图启动时做最小化了，如果你用的是Eclipse3.3开发RCP程序，那么就可以非常方便的给客户在一个透视图中展现多个Viewer了~<br />
&nbsp;&nbsp; 代码如下：<br />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-family: Arial"><img id="Codehighlighter1_53_302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_302_Open_Text.style.display='none'; Codehighlighter1_53_302_Closed_Image.style.display='inline'; Codehighlighter1_53_302_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_53_302_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_53_302_Closed_Text.style.display='none'; Codehighlighter1_53_302_Open_Image.style.display='inline'; Codehighlighter1_53_302_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #000000">&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;createInitialLayout(IPageLayout&nbsp;layout)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_53_302_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span></span><span id="Codehighlighter1_53_302_Open_Text"><span style="font-family: Arial"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageLayout&nbsp;pageLayout&nbsp;</span><span style="color: #000000">=</span></span><span style="font-family: Arial"><span style="color: #000000">&nbsp;(PageLayout)layout;<br />
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">layout.addView(ViewPart1.class.getName(),&nbsp;IPageLayout.LEFT,&nbsp;0.35f,&nbsp;layout.getEditorArea());</span></span><span style="color: #008000"><br />
<span style="font-family: Arial"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /></span></span><span style="font-family: Arial"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageLayout.addView(ViewPart1.</span><span style="color: #0000ff">class</span><span style="color: #000000">.getName(),&nbsp;IPageLayout.LEFT,&nbsp;</span><span style="color: #000000">0.35f</span><span style="color: #000000">,&nbsp;layout.getEditorArea(),&nbsp;</span><span style="color: #0000ff">true</span></span><span style="color: #000000"><span style="font-family: Arial">);<br />
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></div>
<span style="font-family: Arial">&nbsp;&nbsp;&nbsp;Eclipse开发团队其实就是在IPageLayout实现类中追加了一个方法~哎~什么遵循接口编程~他们竟然不修改接口~希望正式版发布的时候这个问题有修改~<br />
<br />
&nbsp; </span></div>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/231983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-10-01 13:27 <a href="http://www.blogjava.net/mlzry0612/articles/231983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.4的一些好用的功能</title><link>http://www.blogjava.net/mlzry0612/articles/231980.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 01 Oct 2008 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/231980.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/231980.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/231980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/231980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/231980.html</trackback:ping><description><![CDATA[<span style="font-family: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.快速访问功能：如果你想使用哪个命令，只需要点Ctrl+3启动快速访问，在里面输入命令的前n个字母或者首字母缩写，就可以选择你要运行的命令了。<br style="font-family: " />
&nbsp;&nbsp;&nbsp;&nbsp; 2.对资源，任务，书签的操作都可以被撤销了。<br style="font-family: " />
&nbsp;&nbsp;&nbsp;&nbsp; 3.<span style="font-family: ; font-size: 14pt">支持内容的拖拽，如把第一行的内容直接拖拽到第三行<br style="font-family: " />
&nbsp;&nbsp;&nbsp; 4.</span><span style="font-family: ; font-size: 14pt">按住Ctrl键不松手，使用鼠标滚轮可迅速到达内容的开头或结尾<br style="font-family: " />
&nbsp;&nbsp;&nbsp; 5.</span><span style="font-family: ; font-size: 14pt">双击鼠标可以选中一个单词，三击鼠标可以选中一行<br style="font-family: " />
&nbsp;&nbsp;&nbsp; 6.</span><span style="font-family: ; font-size: 14pt">如果某一行的开头或者结尾有若干空白字符，当使用HOME/END键时，第一次点击忽略空白字符，光标只到达内容的开头或结尾，第二次点击光标才到达真正的开头或结尾。<br style="font-family: " />
&nbsp;&nbsp;&nbsp; 7.&nbsp;在properties里的Editor里加了一个save action的属性，可以在save的时候触发你想触发的东西，例如：格式化等等。<br style="font-family: " />
</span><span style="font-family: ; font-size: 14pt">&nbsp;&nbsp;&nbsp; 8.</span><span style="font-family: ; font-size: 14pt">Ctrl+Alt+J&nbsp;</span><span style="font-family: ; font-size: 14pt">把下一行连接到这一行的后面<br style="font-family: " />
</span><span style="font-family: ; font-size: 14pt">&nbsp;&nbsp; 10.</span><span style="font-family: ; font-size: 14pt">参数打包重构：对于这样的函数int&nbsp;add(int a, int b, int c),由于参数比较多，可以考虑将其合并为一个类，这个类包含3个属性，这个类的功能就是专门为这个函数做参数。在新版本的Eclipse</span><span style="font-family: ; font-size: 14pt">中，选中一个函数，右键菜单refactor-&gt; Introduce Parameter Object可以实现这一功能。（当然，使用新版本的快速访问功能，输入首字母ipo也可以实现这一功能，方便啊~）<br style="font-family: " />
&nbsp;&nbsp; 11.</span><span style="font-family: ; font-size: 14pt">强大的clean up功能：可以把普通循环变成foreach循环，可以删除从未使用的变量、函数，可以在适当的地方添加添加@Override，可以给所有的for，if代码块添加大括号&#8230;&#8230;总之功能很强大了。在source-&gt;clean up菜单下访问。<br style="font-family: " />
&nbsp;&nbsp;&nbsp;</span><span style="font-family: ; font-size: 14pt">&nbsp;</span></span> 来点图<br />
<table class="post">
    <tbody>
        <tr>
            <td style="font-size: 14px" class="title">
            <div style="clear: both">Eclipse3.4发布 新特性展示 </div>
            </td>
        </tr>
        <tr>
            <td>
            <div class="message">
            <div class="ads">
            <div style="width: 120px; height: 240px; vertical-align: middle; overflow: hidden"><a title="OSPod免费论坛" target="_target" href="http://www.ospod.com/forum_down_prg/2008-02-20/299.chtml"><img style="margin-top: 0px; ; margin-top: expression((parentElement.parentElement.offsetHeight-this.offsetHeight)/2)" border="0" src="http://forum.ospod.com/ef/res/images/freeBss.jpg" width="120" height="240"  alt="" /></a> </div>
            </div>
            <span style="font-size: 14px"><strong>介绍</strong> <br />
            eclipse 3.4 代号为ganymede （G anymede (英语发音"GAN uh meed")为最大的木星已知卫星，也是第七颗发现的木星卫星，在伽利略发现的卫星中离木星第三近,在希腊神话中 Ganymede是一个特洛伊美人的男孩(一个美少男)，被宙斯带去给众神斟酒）。 <br />
            <br />
            <strong>1.面包屑</strong> <br />
            其实就是当前类到项目(project)的路径，其中包括包和文件夹。 <br />
            另外，使用者还可以自由地在同一路径下的某个节点处，纵向切换到其他元素。 <br />
            <br />
            <img class="ubb_post_img" title="breadcrumb.png (8 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/902ad28293f548af087743131770ee62.png" /> <script type="text/javascript">showAttachStar('61035','0.0','0','0','1');</script><br />
            <br />
            在节点所在位置做一些操作,比如在同级新增一个类 <br />
            <br />
            <img class="ubb_post_img" title="breadcrumb-context-menu.png (7 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/9d6161871b4346289c4e52565ac9482f.png" /> <script type="text/javascript">showAttachStar('61036','0.0','0','0','1');</script><br />
            <br />
            纵向切换元素 <br />
            <br />
            <img class="ubb_post_img" title="breadcrumb-drop-down.png (11 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/d5bfa73380dfa0bcff85af71f92d4fae.png" /> <script type="text/javascript">showAttachStar('61037','0.0','0','0','1');</script><br />
            <br />
            <strong>2.针对有问题的代码，只要鼠标移动上去，就能提示解决方案信息</strong> <br />
            <br />
            <img class="ubb_post_img" title="rich-problem-hover.png (6 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/9de67b4d062018baddfaebfe258515d1.png" /> <script type="text/javascript">showAttachStar('61038','0.0','0','0','1');</script><br />
            <br />
            <br />
            <strong>3.万能的快速协助(quick assist) <br />
            </strong>只要在任何代码处，按 ctrl + 1，就有可能出现相关的提示，预测你的下一步动作。 <br />
            <br />
            创建getter 和 setter <br />
            <img class="ubb_post_img" title="gettersetter-quickassist.png (2 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/55e0ac1ac389e0a0765368afad34aac4.png" /> <script type="text/javascript">showAttachStar('61039','0.0','0','0','1');</script><br />
            <br />
            <br />
            抽取方法 <br />
            <img class="ubb_post_img" title="extractmethod-quickassist.png (2 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/fc093fdd644cb1c57b74d5b4b62b9dbc.png" /> <script type="text/javascript">showAttachStar('61040','0.0','0','0','1');</script><br />
            <br />
            将低性能的字符串拼接，改用StringBuilder <br />
            <img class="ubb_post_img" title="convert-to-sb2.png (9 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/b56d878d0bfc21c03b1cada5eec6b706.png" /> <script type="text/javascript">showAttachStar('61041','0.0','0','0','1');</script><br />
            <br />
            将字符串拼接改用MessageFormat <br />
            <img class="ubb_post_img" title="convert-to-messageformat.png (8 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/527850d0760ce3b790bb374a1a16704d.png" /> <script type="text/javascript">showAttachStar('61042','0.0','0','0','1');</script><br />
            <br />
            <br />
            4<strong>.按保存时，自动格式化代码（分格式化全文和格式化修改的代码） </strong><br />
            省去了，保存前，按ctrl + shift + f 的时间。 <br />
            <br />
            <img class="ubb_post_img" title="save-action-preference.png (8 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/5ec0426d0b9f3d57cbf973d5a296104f.png" /> <script type="text/javascript">showAttachStar('61043','0.0','0','0','1');</script><br />
            <br />
            <strong>5.当前元素的高亮功能，根据元素是被引用还是赋值（读或写），来 区分 不同的颜色</strong> <br />
            <img class="ubb_post_img" title="read-write-occs.png (3 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/df753354181fec3c7d2e6eff1f7ca332.png" /> <script type="text/javascript">showAttachStar('61044','0.0','0','0','1');</script><br />
            <br />
            <br />
            <strong>6.annotation 格式化</strong> <br />
            <br />
            Annotations on members: <img class="ubb_post_img" title="annotation-fmt-member.png (0 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/326465bc85ee92c152fd8feb93e75470.png" /> <script type="text/javascript">showAttachStar('61045','0.0','0','0','1');</script><br />
            <br />
            Annotations on parameters: <img class="ubb_post_img" title="annotation-fmt-param.png (1 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/3046a19cde5c82889d0afc485433747f.png" /> <script type="text/javascript">showAttachStar('61046','0.0','0','0','1');</script><br />
            <br />
            Annotations on local variables: <img class="ubb_post_img" title="annotation-fmt-var.png (1 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/46c2587fb5ac6b6e81095013a75b013b.png" /> <script type="text/javascript">showAttachStar('61047','0.0','0','0','1');</script><br />
            <br />
            <strong>7.Junit 支持对线程内每个帧（方法）的调用时间输出</strong> <br />
            <br />
            <img class="ubb_post_img" title="junit-time.png (18 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/0e2d9ff11a010a00c22fb4abec86ad1f.png" /> <script type="text/javascript">showAttachStar('61048','0.0','0','0','1');</script><br />
            <br />
            <strong>8.在outline里，支持对同一个类中，方法的重排序</strong> <br />
            <br />
            <img class="ubb_post_img" title="drag-and-drop-outline.png (7 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/8227687130cdb3903819a9859523fa6d.png" /> <script type="text/javascript">showAttachStar('61049','0.0','0','0','1');</script><br />
            <br />
            <strong>9.查找某个元素的调用层次，支持更多，更细的内容，包括成员变量访问等，call hierarchy</strong> <br />
            <br />
            <img class="ubb_post_img" title="call-hierarchy-members.png (5 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/330af9ddfd0f1a90113720100dbf68c2.png" /> <script type="text/javascript">showAttachStar('61050','0.0','0','0','1');</script><br />
            <br />
            <strong>10.更多的搜索选项</strong> <br />
            <br />
            <img class="ubb_post_img" title="finegrain-search.png (42 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/b8f2c4733d4ac2e7290fdeac71fd85e7.png" /> <script type="text/javascript">showAttachStar('61051','0.0','0','0','1');</script><br />
            <br />
            <strong>11.加强了debug 变量查看功能，不需要再按 ctrl + shift + i 来查看变量的值 <br />
            </strong><br />
            <img class="ubb_post_img" title="debug-hover.png (10 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/dd3be1b405b334c3aba5e67885eac6f6.png" /> <script type="text/javascript">showAttachStar('61052','0.0','0','0','1');</script><br />
            <br />
            <strong>12.新增模拟服务端监听的debug功能</strong> <br />
            <br />
            <img class="ubb_post_img" title="listening.png (3 KB) &#13;2008-07-15 10:59 &#13;" alt="Eclipse3.4发布 新特性展示 " src="http://forum.ospod.com/ef/upload/attachment/20080715/ecd548f11d98d8a18d2b6f3060baac27.png" /> <script type="text/javascript">showAttachStar('61053','0.0','0','0','1');</script><br />
            <br />
            </span></div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/231980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-10-01 13:24 <a href="http://www.blogjava.net/mlzry0612/articles/231980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse Action Enable stauts &lt;Test&gt;</title><link>http://www.blogjava.net/mlzry0612/articles/221505.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Tue, 12 Aug 2008 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/221505.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/221505.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/221505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/221505.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/221505.html</trackback:ping><description><![CDATA[<div class="postText">
<p><font face="Courier New" size="2"><a class="" title="" href="http://cnfree2000.spaces.msn.com/blog/cns!6201144F025F9D77!426.entry" target="_blank"><font color="#000080">上一篇文章</font></a>我们知道了Eclipse弹出菜单的基本用法。其实Eclipse的弹出菜单可以用来做很多文章，简单一点的根据文件类别，我们可以进行不同的文件操作，比如Ant的build.xml我们可以用来build，Java文件我们可以用Java Editor打开，这些基于文件类型的操作我们都可以很容易的实现。但是还有一种情况，如果文件类型一样，我们想进行不同的操作，该怎么实现呢？实际上这样的应用很多，比如同样是Java文件，含有main方法的Java文件有Run和Debug的选项，其它的都没有。还有现在的框架都是基于XML文件进行配置的，如果一个项目使用了多个框架，我们怎么根据不同的XML文件进行框架的区分呢？答案就是enablement的test。</font> </p>
<p class="code" id="dtd"><font face="Courier New" size="2">&lt;!ELEMENT </font><a name="e.test"><font face="Courier New" size="2">test</font> </a><font face="Courier New" size="2">EMPTY&gt;<br />
&lt;!ATTLIST test<br />
property&nbsp;CDATA #REQUIRED <br />
args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED <br />
value&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED&gt;</font> </p>
<p><font face="Courier New" size="2"></font></p>
<p class="ConfigMarkup" id="elementDesc"><font face="Courier New" size="2">This element is used to evaluate the property state of the object in focus. The set of testable properties can be extended using the propery tester extension point. The test expression returns EvaluationResult.NOT_LOADED if teh property tester doing the actual testing isn't loaded yet.</font> </p>
<ul class="ConfigMarkup" id="attlistDesc">
    <li><font face="Courier New"><font size="2"><strong>property</strong> - the name of an object's property to test. </font></font>
    <li><font face="Courier New"><font size="2"><strong>args</strong> - additional arguments passed to the property tester. Multiple arguments are seperated by commas. Each individual argument is converted into a Java base type using the same rules as defined for the value attribute of the test expression. </font></font>
    <li><font face="Courier New"><font size="2"><strong>value</strong> - the expected value of the property. Can be omitted if the property is a boolean property. The test expression is supposed to return EvaluationResult.TRUE if the property matches the value and EvaluationResult.FALSE otherwise. The value attribute is converted into a Java base type using the following rules: </font></font>
    <ul>
        <li><font face="Courier New" size="2">the string "true" is converted into Boolean.TRUE </font>
        <li><font face="Courier New" size="2">the string "false" is converted into Boolean.FALSE </font>
        <li><font face="Courier New" size="2">if the string contains a dot then the interpreter tries to convert the value into a Float object. If this fails the string is treated as a java.lang.String </font>
        <li><font face="Courier New" size="2">if the string only consists of numbers then the interpreter converts the value in an Integer object. </font>
        <li><font face="Courier New" size="2">in all other cases the string is treated as a java.lang.String </font>
        <li><font face="Courier New" size="2">the conversion of the string into a Boolean, Float, or Integer can be suppressed by surrounding the string with single quotes. For example, the attribute value="'true'" is converted into the string "true" </font></li>
    </ul>
    </li>
</ul>
<p><br />
<font face="Courier New" size="2">比如我们要让含有main方法的Java文件它的右键弹出菜单包含一个额外的选项&#8220;This is main class&#8221;，需要编写如下的Plugin.xml：</font> </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"><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.ui.popupMenus"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">objectContribution<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objectClass</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="java.lang.Object"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">action&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus.Action"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="AdvancedPopupMenus"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="pulldown"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="additions"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.AdvancedPopupMenusAction"</font> </span><font face="Courier New"><font size="2"><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enablesFor</span> <span style="color: #0000ff">="+"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">test&nbsp;</span> <span style="color: #ff0000">property</span> <span style="color: #0000ff">="advancedpopupmenus.popup.visable"</span> <span style="color: #0000ff">/&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">objectContribution</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">extension&nbsp;</span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.core.expressions.propertyTesters"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">propertyTester<br />
&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">namespace</span> <span style="color: #0000ff">="advancedpopupmenus.popup"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;properties</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="visable"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;type</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="java.lang.Object"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.VisablePropertyTester"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;id</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="advancedpopupmenus.popup.propertyTesters.visable"</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">propertyTester</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
</span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">&gt;</span> </font></font></div>
<p><font face="Courier New" size="2">我们需要检测在当前情况下是否需要显示这个菜单项，使用扩展点</font> <font color="#0000ff"><font face="Courier New" size="2">org.eclipse.core.expressions.propertyTesters</font> <font face="Courier New" color="#000000" size="2">：<br />
</font></font><font face="Courier New" color="#000000" size="2">&lt;!ELEMENT propertyTester EMPTY&gt;<br />
</font><font face="Courier New" color="#000000" size="2">&lt;!ATTLIST propertyTester<br />
</font><font face="Courier New" color="#000000" size="2">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA #REQUIRED<br />
</font><font face="Courier New" color="#000000" size="2">type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA #REQUIRED<br />
</font><font face="Courier New" color="#000000" size="2">namespace&nbsp; CDATA #REQUIRED<br />
</font><font face="Courier New"><font size="2"><font color="#000000">properties CDATA #REQUIRED<br />
</font><font color="#000000">class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA #REQUIRED&gt;</font> </font></font></p>
<p><font color="#000000"><font face="Courier New"><font size="2"><strong>id</strong> - unique identifier for the property tester <br />
<strong>type</strong> - the type to be extended by this property tester <br />
<strong>namespace</strong> - a unique id determining the name space the properties are added to <br />
<strong>properties</strong> - a comma separated list of properties provided by this property tester <br />
<strong>class</strong> - the name of the class that implements the testing methods. The class must be public and extend <font color="#ff0000">org.eclipse.core.expressions.PropertyTester</font> with a public 0-argument constructor.&nbsp;<br />
<br />
这里只须注意</font> </font></font><span style="color: #800000"><font face="Courier New" color="#000000" size="2">propertyTester的namespace和properties正好对应test的property。<br />
</font></span><span style="color: #800000"><font color="#000000"><br />
<font face="Courier New" size="2">至于检测的逻辑我们在advancedpopupmenus.popup.actions.VisablePropertyTester中实现，这个类必须继承自<font color="#ff0000">org.eclipse.core.expressions.PropertyTester</font>。</font> </font></span></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: #0000ff"><font face="Courier New" size="2">package</font> </span><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;advancedpopupmenus.popup.actions;<br />
<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.core.expressions.PropertyTester;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.jdt.core.IMethod;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.jdt.core.IType;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.jdt.core.JavaModelException;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.jdt.internal.core.CompilationUnit;<br />
<br />
</span><span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">&nbsp;VisablePropertyTester&nbsp;</span> <span style="color: #0000ff">extends</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;PropertyTester<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">boolean</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;test(&nbsp;Object&nbsp;receiver,&nbsp;String&nbsp;property,&nbsp;Object[]&nbsp;args,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;expectedValue&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #000000">!</span> <span style="color: #000000">(&nbsp;receiver&nbsp;</span> <span style="color: #0000ff">instanceof</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;CompilationUnit&nbsp;)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CompilationUnit&nbsp;unit&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;(CompilationUnit)&nbsp;receiver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">try</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IType[]&nbsp;types&nbsp;</font> </span><span style="color: #000000"><font face="Courier New" size="2">=</font> </span><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;unit.getTypes(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">&nbsp;(&nbsp;types&nbsp;</span> <span style="color: #000000">==</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">null</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">for</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #0000ff">int</span> <span style="color: #000000">&nbsp;i&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">0</span> <span style="color: #000000">;&nbsp;i&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">&nbsp;types.length;&nbsp;i</span> <span style="color: #000000">++</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMethod[]&nbsp;methods&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;types[i].getMethods(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">&nbsp;(&nbsp;methods&nbsp;</span> <span style="color: #000000">==</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">null</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">for</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #0000ff">int</span> <span style="color: #000000">&nbsp;j&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">0</span> <span style="color: #000000">;&nbsp;j&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">&nbsp;methods.length;&nbsp;j</span> <span style="color: #000000">++</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;(&nbsp;methods[j].isMainMethod(&nbsp;)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">true</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span> <span style="color: #0000ff">catch</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;(&nbsp;JavaModelException&nbsp;e&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><span style="color: #000000"><font face="Courier New" size="2">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</font></span></div>
<p><font face="Courier New" size="2">我们只要判断接受的Java文件中是否含有main方法，如果有，则返回True，没有则返回False。<br />
<br />
如果我们是要接受一个Web开发的配置文件，我们可以这样写：</font> </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"><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.ui.popupMenus"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">objectContribution<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objectClass</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="org.eclipse.core.resources.IFile"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nameFilter</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="*.xml"</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">action&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="Advanced.PopupMenus.Action"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="This&nbsp;is&nbsp;web&nbsp;xml"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="pulldown"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menubarPath</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="additions"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.AdvancedPopupMenusAction"</font> </span><font face="Courier New"><font size="2"><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enablesFor</span> <span style="color: #0000ff">="+"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">test&nbsp;</span> <span style="color: #ff0000">property</span> <span style="color: #0000ff">="advancedpopupmenus.popup.visable"</span> <span style="color: #0000ff">/&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">enablement</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">objectContribution</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">extension&nbsp;</span> <span style="color: #ff0000">point</span> <span style="color: #0000ff">="org.eclipse.core.expressions.propertyTesters"</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">&lt;</font> </span><font face="Courier New"><font size="2"><span style="color: #800000">propertyTester<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #ff0000">namespace</span> <span style="color: #0000ff">="advancedpopupmenus.popup"</span> </font></font><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="visable"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="org.eclipse.core.resources.IFile"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</font> </span><span style="color: #0000ff"><font face="Courier New" size="2">="advancedpopupmenus.popup.actions.VisablePropertyTester"</font> </span><span style="color: #ff0000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</font> </span><font face="Courier New"><font size="2"><span style="color: #0000ff">="advancedpopupmenus.popup.propertyTesters.visable"</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">propertyTester</span> <span style="color: #0000ff">&gt;</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">extension</span> <span style="color: #0000ff">&gt;</span> </font></font><span style="color: #000000"><br />
</span><font face="Courier New"><font size="2"><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">plugin</span> <span style="color: #0000ff">&gt;</span> </font></font></div>
<p><font face="Courier New"><font size="2">注意和上一个例子不同的地方，objectClass，nameFileter和type(在上一个例子中，我们也可以使用<font color="#ff0000">objectClass</font><span style="color: #0000ff">="org.eclipse.core.resources.IFile" </span><span style="color: #ff0000">nameFilter</span></font> </font><span style="color: #0000ff"><font face="Courier New" size="2">="*.java"</font> <font color="#000000"><font face="Courier New" size="2">)，相应的我们的VisablePropertyTester类也要做一些改动：</font> </font></span></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: #0000ff"><font face="Courier New" size="2">package</font> </span><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;advancedpopupmenus.popup.actions;<br />
<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;javax.xml.parsers.DocumentBuilder;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;javax.xml.parsers.DocumentBuilderFactory;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.core.expressions.PropertyTester;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.eclipse.core.resources.IFile;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.w3c.dom.Document;<br />
</span><span style="color: #0000ff">import</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;org.w3c.dom.DocumentType;<br />
<br />
</span><span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">&nbsp;VisablePropertyTester&nbsp;</span> <span style="color: #0000ff">extends</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;PropertyTester<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">boolean</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;test(&nbsp;Object&nbsp;receiver,&nbsp;String&nbsp;property,&nbsp;Object[]&nbsp;args,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;expectedValue&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">&nbsp;(&nbsp;</span> <span style="color: #000000">!</span> <span style="color: #000000">(&nbsp;receiver&nbsp;</span> <span style="color: #0000ff">instanceof</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;IFile&nbsp;)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFile&nbsp;xml&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;(IFile)&nbsp;receiver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">try</span> </font></font><span style="color: #000000"><br />
<font face="Courier New" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory&nbsp;dbf&nbsp;</font> </span><span style="color: #000000"><font face="Courier New" size="2">=</font> </span><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;DocumentBuilderFactory.newInstance(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder&nbsp;db&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;dbf.newDocumentBuilder(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;db.parse(&nbsp;xml.getContents(&nbsp;)&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentType&nbsp;type&nbsp;</span> <span style="color: #000000">=</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;doc.getDoctype(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">(type.getSystemId(&nbsp;).equalsIgnoreCase(&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">http://java.sun.com/j2ee/dtds/web-app_2_2.dtd</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;))</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">true</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">catch</span> </font></font><font face="Courier New"><font size="2"><span style="color: #000000">&nbsp;(&nbsp;Exception&nbsp;e&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">false</span> </font></font><span style="color: #000000"><font face="Courier New" size="2">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</font> </span></div>
<p><font face="Courier New" size="2">这样根据不同的xml SystemID，我们就能够知道到底这是哪一种框架的配置文件了。</font> </p>
</div>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/221505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-08-12 15:26 <a href="http://www.blogjava.net/mlzry0612/articles/221505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Myeclipes完整版的小问题</title><link>http://www.blogjava.net/mlzry0612/articles/221216.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Mon, 11 Aug 2008 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/221216.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/221216.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/221216.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/221216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/221216.html</trackback:ping><description><![CDATA[１.　无法看到jdk 源代码。Solution: 1.&nbsp;替换JDK.　２。　用有源码的eclipse.&nbsp;&nbsp;<br />
<span style="color: #000000"><br />
<br />
现在在Java开发中，使用的开发工具大部分都是Eclipse，并且和Eclipse关系紧密的要数MyEclipse了，但是MyEclipse是一个EXE可执行程序，对于没有安装Eclipse与MyEclilpse的电脑来说，首先得先解压Eclipse，然后再安装MyEclipse，这不光很麻烦，而且还很费时，对于已经安装好的电脑来说，如果哪天电脑出了问题或是Eclipse崩溃了，导致工具不能用，这时又不得不重新安装时，那可真够郁闷滴～～～，因此，大象本着我为人人，人人为我的奉献精神，在此，将Eclipse+MyEclipse的完全绿色版制作方法写出来，和大家一起分享，让大家都能享受到这种方便。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这里，大象采用Eclipse3.3.1与MyEclipse_6.0.1GA_E3.3.1_Installer版来举例说明，其它的版本做法与此相同。</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><span style="color: #0000ff"><strong>第1步：下载Eclipse3.3.1和MyEclipse_6.0.1GA<br />
</strong><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里我要提醒大家注意一下：下载</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Eclipse</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">时不要选择</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">3.2</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的版本，因为</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">MyEclipse6.0</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">需要</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">3.3</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">版本以上的支持，另外就是下载</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">MyEclipse</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">时不要下完全版，而应该只下插件版，我的这个</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">MyEclipse6.0.1</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的插件版是</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">176M。<br />
<img height="34" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/1.JPG" width="495" vspace="5" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="font-size: 10pt; color: blue; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">第</span><span lang="EN-US" style="font-size: 10pt; color: blue; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">2</span></strong><strong><span style="font-size: 10pt; color: blue; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">步：解压</span><span lang="EN-US" style="font-size: 10pt; color: blue; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Eclipse3.3.1</span></strong>&nbsp;<br />
<span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Eclipse3.3.1</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的压缩包解压到</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">D</span><span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">盘根目录下。<br />
<img height="256" alt="" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/2.JPG" width="505" border="0" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;做这个绿色版，把它放在根目录下是因为这样做很方便，<span style="color: #ff0000">在这里，大象以D盘为例，来说明制作方法。</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><strong>第3步：安装MyEclipse6.0.1GA<br />
</strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;双击"<font style="color: #ff0000" face="宋体" color="#0000ff" size="2">MyEclipse_6.0.1GA_E3.3.1_Installer.exe</font>"开始安装MyEclipse，在第3步:"Choose Eclipse Folder"时，注意 "Please Choose Existing Eclipse Installation Folder"，点击"Choose...",请选择你解压的Eclipse文件夹，选择好之后如下图：<br />
<img height="465" alt="" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/4.JPG" width="622" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击"Next"，出现"Where Would You Like to Install MyEclipse 6.0.1?",点击"Choose...",选择上面的eclipse文件夹，这时记得在eclipse后面加一个目录名，否则，MyEclipse的安装文件就会全部放在eclipse的根目录下，这可不是我们希望看到滴，设置好之后如下图:<br />
<img height="467" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/5.JPG" width="622" vspace="5" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的安装没什么好说的，就是一路Next了。安装结束后，可以在eclipse目录下看到有一个"MyEclipse 6.0.1GA"这个文件夹,进去看看，是不是有两个文件夹，两个文件？<br />
<img height="71" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/10.JPG" width="438" vspace="5" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK,到此MyEclipse插件已经安装完成了，下面来进行我们的绿色插件制作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><strong>第4步：插件制作<br />
</strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在eclipse目录下，新建一个文件夹，命名为"<font style="background-color: #ffffff" face="宋体" size="2">ThirdPlugins</font>"（你要取别的名字也可以，不过一定要和links目录里面的配置文件中的路径一致，后面会有说明),将"MyEclipse 6.0.1GA"这个文件夹复制到"ThirdPlugins"目录下，别用剪切喔，这可是刚才安装MyEclipse的目录，等会还要缷载MyEclipse，如果这个目录没有了，到时缷载不了，出了什么问题可不要怪大象喔！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyEclipse安装好之后，会在eclipse目录下生成一个links文件夹，里面有一个"com.genuitec.eclipse.MyEclipse.link"文件，我们删除它，另外新建一个"MyEclipse 6.0.1GA.ini"文件，内容为：<span style="color: #ff0000">path=ThirdPlugins/MyEclipse 6.0.1GA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">保存完之后，我们的插件制作也结束了，然后就是缷载MyEclipse，千万不要直接把那个文件夹删掉，而应该缷载它。<br />
<img height="74" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/9.JPG" width="381" vspace="5" border="0" /><br />
<img height="79" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/8.JPG" width="347" vspace="5" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实所有的插件都可以按这个方式来做，这样做的好处就是，想用就放进去，不想用就删掉，如果放到eclipse的features和plugins里面，会很不好管理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><strong>第5步：配置参数</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;虽然插件已经安装好了，但是，此时我们还不能启动它，应该对eclipse的启动参数设置一下，提高它的启动速度和运行时的稳定性。在eclipse.exe上点右键，选择"创建快捷方式"，在快捷方式上点右键，选择"属性"，在"D:\eclipse\eclipse.exe后面加上空格，将这些参数加在后面：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">-vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M -XX:MaxPermSize=128M -Xms256M -Xmx512M<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">-Xms256M -Xmx512M：这是堆，根据内存大小来设置，比如大象的内存是1G,我就设成256和512，这样一般都够用了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然了，你也可以什么都不设置，不过大象还是建议设置这些参数，可以很大程度上提升eclipse的启动速度。在安装完MyEclipse时，还会生成一个eclipse.ini的备份文件，这个不需要，删掉。我们可以修改下eclipse.ini文件，原始的如下：
<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: #000000">-</span><span style="color: #000000">showsplash<br />
com.genuitec.myeclipse.product<br />
</span><span style="color: #000000">--</span><span style="color: #000000">launcher.XXMaxPermSize<br />
256m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">vmargs<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xms128m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xmx512m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Dosgi.splashLocation</span><span style="color: #000000">=</span><span style="color: #000000">D:\eclipse\MyEclipse&nbsp;</span><span style="color: #000000">6.0</span><span style="color: #000000">.1GA\eclipse\MyEclipseSplash.bmp<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Duser.language</span><span style="color: #000000">=</span><span style="color: #000000">en&nbsp;<br />
</span><span style="color: #000000">-</span><span style="color: #000000">XX:PermSize</span><span style="color: #000000">=</span><span style="color: #000000">128M&nbsp;<br />
</span><span style="color: #000000">-</span><span style="color: #000000">XX:MaxPermSize</span><span style="color: #000000">=</span><span style="color: #000000">256M</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实这个文件为空都没关系，大象试过，全部删除，没有错误，不过我还是建议大家里面至少保留这些东东<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: #000000">-</span><span style="color: #000000">vmargs<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xms256m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xmx512m</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我将128改成了256，如果你想在MyEclipse插件中用"MyEclipse 6.0.1"快捷方式来启动的话，可以写成这样<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: #000000">-</span><span style="color: #000000">vmargs<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xms256m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Xmx512m<br />
</span><span style="color: #000000">-</span><span style="color: #000000">Dosgi.splashLocation</span><span style="color: #000000">=</span><span style="color: #000000">D:\Eclipse</span><span style="color: #000000">-</span><span style="color: #000000">3.3</span><span style="color: #000000">.</span><span style="color: #000000">1</span><span style="color: #000000">\ThirdPlugins\MyEclipse&nbsp;</span><span style="color: #000000">6.0</span><span style="color: #000000">.1GA\eclipse\MyEclipseSplash.bmp</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最下面一行是启动时，显示MyEclipse的图片，如果没有这句话运行"MyEclipse 6.0.1"快捷方式，则会显示eclipse的启动画面，其实"MyEclipse 6.0.1"快捷方式还是连接着eclipse.exe这个执行程序，在"MyEclipse 6.0.1"上点右键，选择属性，在目标里就可以看到。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><strong>第6步：注册MyEclipse<br />
</strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyEclipse6.0的注册一定要断开网络，否则肯定不成功！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">6.0.1GA注册码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subscriber: administrator<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subscription Code: nLR7ZL-655342-54657656405281154<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">这里有一点大象要提醒大家注意，如果你电脑上现在正有使用的MyEclipse，就是说已经注册了，那么在C:\Documents and Settings\"自己的用户名" 目录下，会有一个".myeclipse.properties"文件，这时请先备份此文件，然后删除它，断开网络，再来注册MyEclipse6.0.1，成功后如下：<br />
<img height="410" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/7.JPG" width="523" vspace="5" border="0" /><br />
<img height="277" alt="" hspace="2" src="http://www.blogjava.net/images/blogjava_net/bolo/eclipse/6.JPG" width="720" vspace="5" border="0" /></span></span></span></span></p>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff"><strong>第7步：打包eclipse<br />
</strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到现在所有的工作都已经完成，启动eclipse的速度快不快？好了，该做最后一步操作了，将"<font face="宋体" size="2">configuration"文件夹下的内容除"<font face="宋体" size="2">config.ini</font>"文件外全部删除，另外再把workspace文件夹删除，大象一般会把workspace放在eclipse根目录下，方法是在第一次启动选择路径时把前面的目录都删除，只保留workspace（前面什么都不要保留）。这样方便管理，你要放在其它的地方随便，这个看各人喜好。做完这两步之后，最好还是在eclipse目录下建一个txt文本文件，把上面的注册码放到里面，另外加上一句话:"<font face="宋体" size="2">注册时一定要断开网络,否则肯定注册不成功!</font>"这样以后用时，可以提醒自己一下。里面有注册码，要用时很方便。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在eclipse文件夹上点右键，选择"添加到eclipse.rar"，等到压缩完成，至此，终于大功告成！<br />
&nbsp;&nbsp;&nbsp;&nbsp;大家尽管放心按着我的方法试，大象前前后后做了不下十遍，今天又在公司的电脑上做了一遍，图片都是刚刚截取的，嘿嘿，今天老板不在，大象小小的放松一下，写写博客。有了这个压缩包，以后大家在使用时就会方便很多，特别是保存到移动硬盘里，想在哪用就在哪用。哇哈哈哈哈~~~~~~~~祝大家好运，都成功做出来！<br />
</font></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/221216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-08-11 09:58 <a href="http://www.blogjava.net/mlzry0612/articles/221216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDT </title><link>http://www.blogjava.net/mlzry0612/articles/214701.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Mon, 14 Jul 2008 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/214701.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/214701.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/214701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/214701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/214701.html</trackback:ping><description><![CDATA[<p>JDT实际上是将Java代码构建成一个基于DOM结构的抽象语法树AST（Abstract Syntax Tree ）。代码中的每个部分都对应一个ASTNode，许多的ASTNode就构成了这个抽象的语法树。Java Class一般对应Compilation Unit node，该节点也是AST树上的顶点。创建一个AST如下： </p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>ASTParser&nbsp;parser&nbsp;=&nbsp;ASTParser.newParser(AST.JLS3); &nbsp;&nbsp;</span></span>
    <li class=""><span>parser.setSource(</span><span class="string">""</span><span>.toCharArray()); &nbsp;&nbsp;</span>
    <li class="alt"><span>CompilationUnit&nbsp;unit&nbsp;=&nbsp;(CompilationUnit)&nbsp;parser.createAST(</span><span class="keyword">null</span><span>);&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>unit.recordModifications(); &nbsp;&nbsp;</span>
    <li class="alt"><span>AST&nbsp;ast&nbsp;=&nbsp;unit.getAST();&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font face="Arial">其中createAST，当parse需要较长时间时，可以采用createAST(new NullProgressMonitor())，否则直接传null即可。</font></p>
<p><font face="Arial">recordModifications()用于记录节点的变动，比如修改、删除等，当需要对AST树进行变动操作时，必须要预先调用这个方法。</font></p>
<font face="Arial">
<p><br />
比较重要的是：一个AST树上的所有节点必须都属于该AST。不允许直接将其他AST树上的节点添加该AST树上。否则会抛出java.lang.IllegalArgumentException异常。须使用ASTNode.copySubtree(AST target, ASTNode node)返回一个目标树的深度拷贝，才能进行添加操作。例如:</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>ASTParser&nbsp;parser&nbsp;=&nbsp;ASTParser.newParser(AST.JLS3); &nbsp;&nbsp;</span></span>
    <li class=""><span>parser.setSource(</span><span class="string">""</span><span>.toCharArray()); &nbsp;&nbsp;</span>
    <li class="alt"><span>CompilationUnit&nbsp;targetRoot=&nbsp;(CompilationUnit)&nbsp;parser.createAST(</span><span class="keyword">null</span><span>);&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>targetRoot.recordModifications(); &nbsp;&nbsp;</span>
    <li class="alt"><span>parser.setSource(</span><span class="string">"class&nbsp;T{}&#8221;"</span><span>.toCharArray()); &nbsp;&nbsp;</span>
    <li class=""><span>CompilationUnit&nbsp;srcRoot=&nbsp;(CompilationUnit)&nbsp;parser.createAST(</span><span class="keyword">null</span><span>);&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span class="comment">//这是非法操作，两者的AST源不一样 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>targetRoot.types().add(srcRoot.types().get(</span><span class="number">0</span><span>)); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="comment">//这是合法操作 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>targetRoot.types().add(ASTNode.copySubtree( &nbsp;&nbsp;</span>
    <li class="alt"><span>targetRoot.getAST(),&nbsp;(ASTNode)&nbsp;srcRoot.types().get(</span><span class="number">0</span><span>))); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="comment">//这是合法操作 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>targetRoot.types().add(targetRoot.getAST().newTypeDeclaration());&nbsp;&nbsp;</span> </li>
</ol>
</font></div>
<p><br />
&nbsp;</p>
<div class="blog_content">现把一些 Java代码生成对应的ASTNode方式列出来，供参考：<br />
<br />
<strong>List 1 生成Package<br />
</div>
</strong>
<div class="blog_content">
<pre>// package astexplorer;
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>PackageDeclaration&nbsp;<strong>packageDeclaration&nbsp;</strong>=&nbsp;ast.newPackageDeclaration();&nbsp;&nbsp;</span></span>
    <li class=""><span>unit.setPackage(packageDeclaration);&nbsp;&nbsp;</span>
    <li class="alt"><span>packageDeclaration.setName(ast.newSimpleName(<span class="string">"astexplorer"</span><span>));&nbsp;<br />
    </span></span>
    </li>
</ol>
</div>
<strong></strong></pre>
</div>
<div class="blog_content"><strong><strong>List 2 生成Import<br />
</div>
</strong></strong>
<div class="blog_content">
<pre>// import org.eclipse.swt.SWT;<br />
// import org.eclipse.swt.events.*;<br />
// import org.eclipse.swt.graphics.*;<br />
// import org.eclipse.swt.layout.*;<br />
// import org.eclipse.swt.widgets.*;
<div class="code_title"><strong>java 代码</strong></div>
<div class="dp-highlighter">
<div class="bar"><strong>&nbsp;</strong></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;IMPORTS.length;&nbsp;++i)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>ImportDeclaration&nbsp;<strong>importDeclaration&nbsp;</strong>=&nbsp;ast.newImportDeclaration();&nbsp;&nbsp;</span>
    <li class="alt"><span>importDeclaration.setName(ast.newName(getSimpleNames(IMPORTS[i])));&nbsp;&nbsp;</span>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(IMPORTS[i].indexOf(</span><span class="string">"*"</span><span>)&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>)&nbsp;&nbsp;</span></span>
    <li class="alt"><span>importDeclaration.setOnDemand(<span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span>
    <li class=""><span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>importDeclaration.setOnDemand(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>unit.imports().add(importDeclaration);&nbsp;&nbsp;</span>
    <li class=""><span>}&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content"><strong><strong>List 3 生成Class Declaration<br />
</div>
</strong></strong>
<div class="blog_content">
<pre>// public class SampleComposite extends Composite <br />
</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>TypeDeclaration&nbsp;<strong>classType&nbsp;</strong>=&nbsp;ast.newTypeDeclaration();&nbsp;&nbsp;</span></span>
    <li class=""><span>classType.setInterface(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span>
    <li class="alt"><span>classType.setModifiers(Modifier.PUBLIC);&nbsp;&nbsp;</span>
    <li class=""><span>classType.setName(ast.newSimpleName(<span class="string">"SampleComposite"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>classType.setSuperclass(ast.newSimpleName(<span class="string">"Composite"</span><span>));&nbsp;&nbsp;</span></span>
    <li class=""><span>unit.types().add(classType);&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><br />
<font face="Arial"><strong><strong><br />
List 4 生成Constructor Declaration<br />
<br />
</strong></strong></font>// public SampleComposite(Composite parent,int style){}</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>MethodDeclaration&nbsp;<strong>methodConstructor&nbsp;</strong>=&nbsp;ast.newMethodDeclaration();&nbsp;&nbsp;</span></span>
    <li class=""><span>methodConstructor.setConstructor(<span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span>
    <li class="alt"><span>methodConstructor.setModifiers(Modifier.PUBLIC);&nbsp;&nbsp;</span>
    <li class=""><span>methodConstructor.setName(ast.newSimpleName(<span class="string">"SampleComposite"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>classType.bodyDeclarations().add(methodConstructor);&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span><span class="comment">//&nbsp;constructor&nbsp;parameters</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>SingleVariableDeclaration&nbsp;variableDeclaration&nbsp;=&nbsp;ast.newSingleVariableDeclaration();&nbsp;&nbsp;</span>
    <li class=""><span>variableDeclaration.setModifiers(Modifier.NONE);&nbsp;&nbsp;</span>
    <li class="alt"><span>variableDeclaration.setType(ast.newSimpleType(ast.newSimpleName(<span class="string">"Composite"</span><span>)));&nbsp;&nbsp;</span></span>
    <li class=""><span>variableDeclaration.setName(ast.newSimpleName(<span class="string">"parent"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>methodConstructor.parameters().add(variableDeclaration);&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>variableDeclaration&nbsp;=&nbsp;ast.newSingleVariableDeclaration();&nbsp;&nbsp;</span>
    <li class=""><span>variableDeclaration.setModifiers(Modifier.NONE);&nbsp;&nbsp;</span>
    <li class="alt"><span>variableDeclaration.setType(ast.newPrimitiveType(PrimitiveType.INT));&nbsp;&nbsp;</span>
    <li class=""><span>variableDeclaration.setName(ast.newSimpleName(<span class="string">"style"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>methodConstructor.parameters().add(variableDeclaration);&nbsp;&nbsp;</span>
    <li class="">
    <li class="alt"><span>Block&nbsp;constructorBlock&nbsp;=&nbsp;ast.newBlock();&nbsp;&nbsp;</span>
    <li class=""><span>methodConstructor.setBody(constructorBlock);<br />
    </span>
    </li>
</ol>
</div>
</pre>
</div>
<font face="Arial">
<div class="blog_content">
<pre><strong>&nbsp;</strong><font size="+0"><font face="Arial"><strong>List 5 生成Spuer Invocation<br />
<br />
</strong></font></font>// super(parent,style)</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>SuperConstructorInvocation&nbsp;superConstructorInvocation&nbsp;=&nbsp;ast.newSuperConstructorInvocation();&nbsp;&nbsp;</span></span>
    <li class=""><span>constructorBlock.statements().add(superConstructorInvocation);&nbsp;&nbsp;</span>
    <li class="alt"><span>Expression&nbsp;exp&nbsp;=&nbsp;ast.newSimpleName(<span class="string">"parent"</span><span>);&nbsp;&nbsp;</span></span>
    <li class=""><span>superConstructorInvocation.arguments().add(exp);&nbsp;&nbsp;</span>
    <li class="alt"><span>superConstructorInvocation.arguments().add(ast.newSimpleName(<span class="string">"style"</span><span>));&nbsp;&nbsp;</span></span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><br />
<font size="+0"><font size="+0"><font size="+0"><font face="Arial"><strong>List 6 生成ClassInstanceCreation<br />
</strong><br />
</font></font></font></font>// GridLayout gridLayout = new GridLayout();</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>VariableDeclarationFragment&nbsp;vdf&nbsp;=&nbsp;ast.newVariableDeclarationFragment();&nbsp;&nbsp;</span></span>
    <li class=""><span>vdf.setName(ast.newSimpleName(<span class="string">"gridLayout"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>ClassInstanceCreation&nbsp;cc&nbsp;=&nbsp;ast.newClassInstanceCreation();&nbsp;&nbsp;</span>
    <li class=""><span>cc.setName(ast.newSimpleName(<span class="string">"GridLayout"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>vdf.setInitializer(cc);&nbsp;&nbsp;</span>
    <li class="alt"><span>VariableDeclarationStatement&nbsp;vds&nbsp;=&nbsp;ast.newVariableDeclarationStatement(vdf);&nbsp;&nbsp;</span>
    <li class=""><span>vds.setType(ast.newSimpleType(ast.newSimpleName(<span class="string">"GridLayout"</span><span>)));&nbsp;</span></span>
    <li class="alt"><span>constructBlock.statements().add(vds);</span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><br />
// Label label = new Label(this,SWT.NONE);</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>VariableDeclarationFragment vdf&nbsp;=&nbsp;ast.newVariableDeclarationFragment();&nbsp;&nbsp;</span></span>
    <li class=""><span>vdf.setName(ast.newSimpleName(<span class="string">"label"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>cc&nbsp;=&nbsp;ast.newClassInstanceCreation();&nbsp;&nbsp;</span>
    <li class=""><span>cc.setName(ast.newSimpleName(<span class="string">"Label"</span><span>));&nbsp;&nbsp;</span></span>
    <li class=""><span>cc.arguments().add(ast.newThisExpression());&nbsp;&nbsp;</span>
    <li class="alt"><span>cc.arguments().add(ast.newName(getSimpleNames(<span class="string">"SWT.NONE"</span><span>)));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>vdf.setInitializer(cc);&nbsp; <br />
    </span>
    <li class="alt"><span>VariableDeclarationStatement vds&nbsp;=&nbsp;ast.newVariableDeclarationStatement(vdf);&nbsp;&nbsp;</span>
    <li class="alt"><span>vds.setType(ast.newSimpleType(ast.newSimpleName(<span class="string">"Label"</span><span>))); </span> </span>
    <li class="alt"><span><span>constructBlock.statements().add(vds);</span></span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><br />
<font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font face="Arial"><strong>List 7生成MethodInvocation<br />
</strong><br />
</font></font></font></font></font></font></font></font>// setLayout(gridLayout);</pre>
</div>
<div class="blog_content">
<pre class="code_title">java 代码</pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li class="alt"><span><span>MethodInvocation&nbsp;mi&nbsp;=&nbsp;ast.newMethodInvocation();&nbsp;&nbsp;</span></span>
    <li class=""><span>mi.setName(ast.newSimpleName(<span class="string">"setLayout"</span><span>));&nbsp;&nbsp;</span></span>
    <li class="alt"><span>mi.arguments().add(ast.newSimpleName(<span class="string">"gridLayout"</span><span>));&nbsp;</span></span>
    <li class="alt"><span><span><font style="background-color: #fafafa" face="Courier New">constructorBlock.statements().add(ast.newExpressionStatement(mi));</font></span></span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><font face="Arial">// label.setText("Press the button to close:");</font></pre>
</div>
<div class="blog_content">
<pre><font face="Arial">       <strong>  java 代码</strong></font></pre>
</div>
<div class="blog_content">
<pre>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>mi&nbsp;=&nbsp;ast.newMethodInvocation(); &nbsp;&nbsp;</span></span>
    <li class=""><span>mi.setExpression(ast.newSimpleName(</span><span class="string">"label"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>mi.setName(ast.newSimpleName(</span><span class="string">"setText"</span><span>)); &nbsp;&nbsp;</span>
    <li class=""><span>StringLiteral&nbsp;sl&nbsp;=&nbsp;ast.newStringLiteral(); &nbsp;&nbsp;</span>
    <li class="alt"><span>sl.setLiteralValue(</span><span class="string">"Press&nbsp;the&nbsp;button&nbsp;to&nbsp;close:"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>mi.arguments().add(sl); &nbsp;&nbsp;</span>
    <li class="alt"><span>constructorBlock.statements().add(ast.newExpressionStatement(mi));&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
</pre>
</div>
<div class="blog_content">
<pre><font face="Arial">// label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));</font></pre>
</div>
<div class="blog_content">
<pre><font face="Arial">           <strong>java 代码</strong></font>
<pre>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>mi&nbsp;=&nbsp;ast.newMethodInvocation(); &nbsp;&nbsp;</span></span>
    <li class=""><span>mi.setExpression(ast.newSimpleName(</span><span class="string">"label"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>mi.setName(ast.newSimpleName(</span><span class="string">"setLayoutData"</span><span>)); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>cc&nbsp;=&nbsp;ast.newClassInstanceCreation(); &nbsp;&nbsp;</span>
    <li class=""><span>cc.setName(ast.newSimpleName(</span><span class="string">"GridData"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>cc.arguments().add(ast.newName(getSimpleNames(</span><span class="string">"GridData.HORIZONTAL_ALIGN_CENTER"</span><span>))); &nbsp;&nbsp;</span>
    <li class=""><span>mi.arguments().add(cc); &nbsp;&nbsp;</span>
    <li class="alt"><span>constructorBlock.statements().add(ast.newExpressionStatement(mi));&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
</pre>
<font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font face="Arial"></font></font></font></font></font></font></font></font>
<p><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font size="+0"><font face="Arial"></font></font></font></font></font></font></font></font>&nbsp;<font face="Arial">// Button button = new Button(this,SWT.PUSH);</font></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>vdf&nbsp;=&nbsp;ast.newVariableDeclarationFragment(); &nbsp;&nbsp;</span></span>
    <li class=""><span>vdf.setName(ast.newSimpleName(</span><span class="string">"button"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>vds&nbsp;=&nbsp;ast.newVariableDeclarationStatement(vdf); &nbsp;&nbsp;</span>
    <li class=""><span>vds.setType(ast.newSimpleType(ast.newSimpleName(</span><span class="string">"Button"</span><span>))); &nbsp;&nbsp;</span>
    <li class="alt"><span>constructorBlock.statements().add(vds); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>cc&nbsp;=&nbsp;ast.newClassInstanceCreation(); &nbsp;&nbsp;</span>
    <li class=""><span>cc.setName(ast.newSimpleName(</span><span class="string">"Button"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>vdf.setInitializer(cc); &nbsp;&nbsp;</span>
    <li class=""><span>cc.arguments().add(ast.newThisExpression()); &nbsp;&nbsp;</span>
    <li class="alt"><span>cc.arguments().add(ast.newName(getSimpleNames(</span><span class="string">"SWT.PUSH"</span><span>)));&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
<p><font face="Arial"></font></p>
<p><font face="Arial">// button.addSelectionListener(new SelectionAdapter() {});</font> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>java 代码</strong></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>mi&nbsp;=&nbsp;ast.newMethodInvocation(); &nbsp;&nbsp;</span></span>
    <li class=""><span>constructorBlock.statements().add(ast.newExpressionStatement(mi)); &nbsp;&nbsp;</span>
    <li class="alt"><span>mi.setExpression(ast.newSimpleName(</span><span class="string">"button"</span><span>)); &nbsp;&nbsp;</span>
    <li class=""><span>mi.setName(ast.newSimpleName(</span><span class="string">"addSelectionListener"</span><span>)); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>ClassInstanceCreation&nbsp;ci&nbsp;=&nbsp;ast.newClassInstanceCreation(); &nbsp;&nbsp;</span>
    <li class="alt"><span>ci.setName(ast.newSimpleName(</span><span class="string">"SelectionAdapter"</span><span>)); &nbsp;&nbsp;</span>
    <li class=""><span>mi.arguments().add(ci); &nbsp;&nbsp;</span>
    <li class="alt"><span>AnonymousClassDeclaration&nbsp;cd&nbsp;=&nbsp;ast.newAnonymousClassDeclaration(); &nbsp;&nbsp;</span>
    <li class=""><span>ci.setAnonymousClassDeclaration(cd);&nbsp;</span></li>
</ol>
<p class=""><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</p>
</div>
<div class="dp-highlighter">// public void setup(){super.setUp()}
</font>
<ol>
    <ol>
        <ol>
            <li><font style="background-color: #cce8cf">MethodDeclaration methodConstructor = ast.newMethodDeclaration();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; methodConstructor.modifiers().add(<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD));<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; methodConstructor.setName(ast.newSimpleName("setUp"));</font></li>
        </ol>
    </ol>
    <li><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Block constructorBlock = ast.newBlock();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; methodConstructor.setBody(constructorBlock);</font></li>
    <li><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SuperMethodInvocation smi = ast.newSuperMethodInvocation();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; smi.setName(ast.newSimpleName("setUp"));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExpressionStatement es = ast.newExpressionStatement(smi);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constructorBlock.statements().add(es);</font></li>
    <li><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // set exception<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List targetExNames = methodConstructor.thrownExceptions();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name targetExName = ast.newName(Exception.class.getName());<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetExNames.add(targetExName);</font></li>
    <li><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; methodConstructor.setJavadoc(JavaDocHelper.getJavaDoc(ast,<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JavaDocHelper.setUpDoc, null, null));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classType.bodyDeclarations().add(methodConstructor);</font></li>
</ol>
</div>
</pre>
</div>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/214701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-07-14 13:21 <a href="http://www.blogjava.net/mlzry0612/articles/214701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse Plugin Develop , Open preference view</title><link>http://www.blogjava.net/mlzry0612/articles/202339.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Fri, 23 May 2008 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/202339.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/202339.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/202339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/202339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/202339.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf">曾经很蠢的自己去写了一个Dialog去包装preference View.<br />
代码如下 在TS1方法下:<br />
</p>
<p><font style="background-color: #cce8cf">package com.wipro.testtools.ui.internal.action;</font></p>
<p><font style="background-color: #cce8cf">import java.util.Iterator;</font></p>
<p><font style="background-color: #cce8cf">import org.eclipse.ui.IPerspectiveDescriptor;<br />
import org.eclipse.ui.IWorkbench;<br />
import org.eclipse.ui.IWorkbenchWindow;<br />
import org.eclipse.ui.IWorkbenchWindowActionDelegate;<br />
import org.eclipse.ui.WorkbenchException;<br />
import org.eclipse.ui.internal.OpenPreferencesAction;<br />
import org.eclipse.ui.internal.Workbench;<br />
import org.eclipse.ui.internal.WorkbenchPlugin;<br />
import org.eclipse.ui.internal.actions.OpenPerspectiveDialogAction;<br />
import org.eclipse.ui.internal.dialogs.SelectPerspectiveDialog;<br />
import org.eclipse.ui.dialogs.PreferencesUtil;<br />
import org.eclipse.ui.help.WorkbenchHelp;<br />
import org.eclipse.core.runtime.IAdaptable;<br />
import org.eclipse.jface.action.IAction;<br />
import org.eclipse.jface.viewers.ISelection;<br />
import org.eclipse.jface.window.Window;<br />
import org.eclipse.jface.dialogs.TitleAreaDialog;<br />
import org.eclipse.jface.preference.IPreferenceNode;<br />
import org.eclipse.jface.preference.PreferenceManager;<br />
import org.eclipse.jface.preference.IPreferencePage;<br />
import org.eclipse.jface.preference.PreferenceDialog;<br />
import org.eclipse.swt.widgets.Shell;</font></p>
<p><font style="background-color: #cce8cf">public class OpenPreferencePages implements IWorkbenchWindowActionDelegate {<br />
&nbsp;&nbsp;&nbsp; public OpenPreferencePages() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; private IWorkbenchWindow workbenchWindow;</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public void dispose() {<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public void init(IWorkbenchWindow window) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; workbenchWindow = window;<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public void run(IAction action) {</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts2();<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; private void ts2() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // OpenPreferencesAction action = new OpenPreferencesAction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // OpenPerspectiveDialogAction action = new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // OpenPerspectiveDialogAction(null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // action.run();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String ourPreferenceDialog = "com.wipro.testtools.ui.preferences.SamplePreferencePage";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, ourPreferenceDialog, new String[]{ourPreferenceDialog}, null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog.open();</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private void ts1() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String PreferenceNodeId = "org.eclipse.ui.preferencePages.Workbench";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreferenceDialogWrapper dialog = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreferenceManager manager = WorkbenchPlugin.getDefault()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getPreferenceManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (manager != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog = new PreferenceDialogWrapper(getShell(), manager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // WorkbenchHelp.setHelp(dialog.getShell(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // IHelpContextIds.PREFERENCE_DIALOG);</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator iterator = manager.getElements(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreferenceManager.PRE_ORDER).iterator(); iterator.hasNext();) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPreferenceNode node = (IPreferenceNode) iterator.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(node.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (node.getId().equals(PreferenceNodeId)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog.showPage(node);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog.open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public void selectionChanged(IAction action, ISelection selection) {<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; private Shell getShell() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DialogCheck.getShell();<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">}</font></p>
<p><font style="background-color: #cce8cf">class PreferenceDialogWrapper extends PreferenceDialog {<br />
&nbsp;&nbsp;&nbsp; public PreferenceDialogWrapper(Shell parentShell, PreferenceManager manager) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(parentShell, manager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.setSelectedNodePreference("PreferenceNodeId");// this is added<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public boolean showPage(IPreferenceNode node) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.showPage(node);<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public IPreferencePage getPage(IPreferenceNode node) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (node == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (node.getPage() == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node.createPage();</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (node.getPage() == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return node.getPage();<br />
&nbsp;&nbsp;&nbsp; }<br />
}</font></p>
<p><font style="background-color: #cce8cf">class DialogCheck {<br />
&nbsp;&nbsp;&nbsp; private DialogCheck() {<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; private static VerifyDialog _verifyDialog;</font></p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; public static Shell getShell() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shell shell = WorkbenchPlugin.getDefault().getWorkbench()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getActiveWorkbenchWindow().getShell();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _verifyDialog = new VerifyDialog(shell);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _verifyDialog.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _verifyDialog.getShell();<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font style="background-color: #cce8cf">}</font></p>
<p><font style="background-color: #cce8cf">class VerifyDialog extends TitleAreaDialog {<br />
&nbsp;&nbsp;&nbsp; public VerifyDialog(Shell parent) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(parent);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</font></p>
<p><br />
其实eclipse提供了这样的API: See the TS2 Method:<br />
Just two line codes. :(<br />
</font></p>
 <img src ="http://www.blogjava.net/mlzry0612/aggbug/202339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2008-05-23 10:52 <a href="http://www.blogjava.net/mlzry0612/articles/202339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐几个Eclipse常用经典插件 </title><link>http://www.blogjava.net/mlzry0612/articles/45286.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Tue, 09 May 2006 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/45286.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/45286.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/45286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/45286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/45286.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<p>CSS插件：<a href="http://csseditor.sourceforge.net/">http://csseditor.sourceforge.net</a></p>
				<p>JS和AS插件：<a href="http://sourceforge.net/projects/jseditor">http://sourceforge.net/projects/jseditor</a></p>
				<p>XML插件：<a href="http://xmlbuddy.com/">http://xmlbuddy.com</a></p>
				<p>正则表达式测试插件：<a href="http://brosinski.com/stephan/archives/000028.php">http://brosinski.com/stephan/archives/000028.php</a></p>
				<p>XPath测试插件：<a href="http://www.purpletech.com/xpe/index.jsp">http://www.purpletech.com/xpe/index.jsp</a></p>
				<p>更多Eclipse插件：<a href="http://eclipse-plugins.2y.net/eclipse/index.jsp">http://eclipse-plugins.2y.net/eclipse/index.jsp</a></p>
		</div>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/45286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2006-05-09 21:47 <a href="http://www.blogjava.net/mlzry0612/articles/45286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse的FindBugs插件 </title><link>http://www.blogjava.net/mlzry0612/articles/44930.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Sun, 07 May 2006 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/44930.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/44930.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/44930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/44930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/44930.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td align="middle" bgcolor="#f7fbfe" colspan="2" height="40">
										<span style="FONT-SIZE: 16pt; COLOR: #05006c">
												<b>Eclipse的FindBugs插件</b>
										</span>
								</td>
						</tr>
						<tr>
								<td class="table2 style3" align="middle" bgcolor="#f7fbfe" colspan="2" height="20">
								</td>
						</tr>
						<tr>
								<td align="middle" bgcolor="#f7fbfe" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td align="left" bgcolor="#f7fbfe" colspan="2" height="0">
								</td>
						</tr>
						<tr>
								<td align="middle" bgcolor="#f7fbfe" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td valign="top" align="left" width="98%" bgcolor="#f7fbfe" height="142">
										<span class="top11">
												<p>
												</p>
												<p>
														<b>问题提出： </b>
												</p>
												<p>当我们编写完代码，做完单元测试等各种测试后就提交正式运行，只能由运行的系统来检测我们代码是否有问题了，代码中隐藏的错误在系统运行的过程中被发现后，然后再来进行相应的修改，那么后期修改的代价就相当高了。</p>
												<p>
														<b>解决方法：</b>
												</p>
												<p>现在有很多Java代码分析工具，FindBugs中开源项目当中的一个，它可以帮你找到代码中隐藏的一些错误，提升你的代码能力与系统安全可靠性。</p>
												<p>
														<b>安装</b>
												</p>
												<p>JDK：1.5.0 从http://java.sun.com上去下载安装 </p>
												<p>Eclipse：3.1.1 从http://www.eclipse.org 上去下载解压 </p>
												<p>FindBugs：0.9.4 从http://findbugs.sourceforge.net/ </p>
												<p>官方的文档 http://findbugs.sourceforge.net/manual/ </p>
												<p>Eclipse plugin for FindBugs version 0.0.17 从 http://findbugs.sourceforge.net/downloads.html 下载</p>
												<p>
														<b>插件管理技巧</b>
												</p>
												<p>提示：新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去。</p>
												<ol>
														<li>前提是你已经安装好了Eclipse工具了，比如安装在E:\OpenSource\Eclipse\目录下，以下这个目录以%ECLIPSE_HOME%来进行表示； 
</li>
														<li>此时默认的插件是在%ECLIPSE_HOME%\plugins目录中的； 
</li>
														<li>在%ECLIPSE_HOME%下建立一个PlugInsNew的目录； 
<p>比如：E:\OpenSource\Eclipse\PlugInsNew\ </p></li>
														<li>你下载了个新的插件，比如叫做：XYZ 
<p>那么就在%ECLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录，目录里面是eclipse目录，eclipse目录包含有features与plugins两个子目录；结构如下图所示：</p><center><img src="http://www.51cto.com/files/uploadimg/20060208/0727050.jpg" border="0" /></center></li>
														<li>把下载的新插件的文件放在以下相应目录中 
<p>%ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features</p><p>%ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins</p></li>
														<li>建立相关的.link的文件 
<p>然后在%ECLIPSE_HOME%\links目录里建立一个XYZ.link的文件 </p><p>内容如是：path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。 </p><p>当然，采用相对路径来表示可能更直观一些，方便进行文件整体移动和小组全部成员的共享命名用，省得移动后要改动Link文件里的绝对路径而费心费力。直接拷贝过去就可以使用。 </p><p>即XYZ.link文件的内容如是：path=../PlugInsNew/XYZ </p><p>这样，如果你下载了多个插件就可以如法炮制建立多个Link文件，想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%\links的目录中即可，使用与管理都很方便，建议千万不要放在默认的安装目录中； </p><p>如果你的%ECLIPSE_HOME%与此不同，请修改XYZ.link文件里的路径</p></li>
														<li>删除，关闭Eclipse 
<p>删除%ECLIPSE_HOME%\links\XYZ.link文件即可 </p><p>删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文件</p></li>
														<li>重新启动Eclipse即可 </li>
												</ol>
												<p>
														<b>使用</b>
												</p>
												<p>重新启动Eclipse后，在Help =&gt; About Eclipse SDK =&gt; Plug-in Details你可以看到由“FindBugs Project”提供的“FindBugs Plug-in”版本0.0.17插件，如下图所示：</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727051.jpg" border="0" />
												</center>
												<p>
														<b>FindBugs的使用方法</b>
												</p>
												<p>FindBugs是一个可以在Java程序中发现Bugs的程序。 </p>
												<p>它是专门用来寻找处于“Bug Patterns”列表中的代码的。 </p>
												<p>Bug Patterns指很有可能是错误的代码的实例。</p>
												<p>目前FindBugs最高版本0.9.4，不过更新速度很快的，你应当经常上去看看是否有新版本发布。Eclipse plugin for FindBugs最高版本0.0.17。</p>
												<p>
														<b>系统要求</b>
												</p>
												<p>使用FindBugs至少需要JDK1.4.0以上版本，FindBugs是平台独立的，可以运行于GNU/Linux、Windows、MacOS X等平台上。</p>
												<p>运行FindBugs至少需要有256 MB内存，如果你要分析一个很大的项目，那就需要更加多的内存了。</p>
												<p>FindBugs独立运行和与Ant结合的详细操作就不介绍了，可以看官方的文档http://findbugs.sourceforge.net/manual/</p>
												<p>独立运行的效果图如下：</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727052.jpg" border="0" />
												</center>
												<p>打开Bug Details视图</p>
												<p>Windows =&gt; Show View =&gt; Other… =&gt; FindBugs =&gt; BugDetails</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727053.jpg" border="0" />
												</center>
												<p>在Package Explorer或Navigator视图中，选中你的Java项目，右键，可以看到“Find Bugs”菜单项，子菜单项里有“Find Bugs”和“Clear Bug Markers”两项内容，如下图所示：</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727054.jpg" border="0" />
												</center>
												<p>我们建立一个简单的测试文件Test.java 内容如下： </p>
												<p>public class Test { private String[] name; public String[] getName() { return name; } public void setName(String[] name) { this.name = name; } } </p>
												<p>我们点中“Find Bugs”，运行时会出现如下进度框：</p>
												<p>运行结束后可以在Problems中看到增加了如下的警告信息内容</p>
												<p>FindBugs运行后的警告信息内容不仅在Problems视图中显示，而且将标记在源代码标记框中，在源代码编辑器中我们可以看到警告标识，如下图： </p>
												<p>当光标指向你的警告信息的代码上面时，就会有相应的错误提示信息，与Eclipse本身的错误或警告信息提示类似。 </p>
												<p>选中Problems视图里出现的相应问题，就会在代码编辑器里切换到相应的代码上去，方便根据相应的提示信息进行代码的修改。 </p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727055.jpg" border="0" />
												</center>
												<p>在Problems视图里，选中相应的问题条目，右键，在弹出的菜单中，可以看到“Show Bug Details”，如下图所示：</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727056.jpg" border="0" />
												</center>
												<p>点中它，会切换到Bug Details视图上去，显示更加详细的提示信息。</p>
												<p>当然，在代码编辑窗口中，点击带有警告提示信息的图标时，也会自动切换到Bud Details窗口去，查看详细的警告信息，如下图所示。</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727057.jpg" border="0" />
												</center>
												<p>根据这里详细的信息，你可以得到FindBugs为什么会对你的代码报警告信息，及相应的处理办法，根据它的提示，你可以快速方便地进行代码修改。</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727058.jpg" border="0" />
												</center>
												<p>根据提示，我们将代码修改成如下，再运行就不会报有警告信息了。</p>
												<p>public class Test { private String[] name; public String[] getName() { String[] temp = name; return temp; } public void setName(String[] name) { String[] temp = name; this.name = temp; } } <b>配置FindBugs</b></p>
												<p>选择你的项目，右键 =&gt; Properties =&gt; FindBugs =&gt;</p>
												<center>
														<img src="http://www.51cto.com/files/uploadimg/20060208/0727059.jpg" border="0" />
												</center>
												<p>可以配置的信息包括如上图所示的四个选项的相关设置：</p>
												<ol>
														<li>
																<strong>Run FindBugs Automatically开关</strong>
																<p>当此项选中后，FindBugs将会在你修改Java类时自动运行，如你设置了Eclipse自动编译开关后，当你修改完Java文件保存，FindBugs就会运行，并将相应的信息显示出来。 </p>
																<p>当此项没有选中，你只能每次在需要的时候自己去运行FindBugs来检查你的代码。 </p>
														</li>
														<li>
																<strong>Minimum priority to report选择项</strong>
																<p>这个选择项是让你选择哪个级别的信息进行显示，有Low、Medium、High三个选择项可以选择，很类似于Log4J的级别设置啦。 比如： </p>
																<p>你选择了High选择项，那么只有是High级别的提示信息才会被显示。 </p>
																<p>你选择了Medium选择项，那么只有是Medium和High级别的提示信息才会被显示。 </p>
																<p>你选择了Low选择项，那么所有级别的提示信息都会被显示。</p>
														</li>
														<li>
																<strong>Enable bug categories选择项</strong>
																<p>在这里是一些显示Bug分类的选择： </p>
																<p>Correctness关于代码正确性相关方面的 </p>
																<p>Performance关于代码性能相关方面的 </p>
																<p>Internationalization关于代码国际化相关方面的 </p>
																<p>Multithreaded correctness关于代码多线程正确性相关方面的</p>
																<p>Style关于代码样式相关方面的</p>
																<p>Malicious code vulnerability关于恶意破坏代码相关方面的 </p>
																<p>比如：如果你把Style的检查框去掉不选择中它，那么与Style分类相关的警告信息就不会显示了。其它的类似。</p>
														</li>
														<li>
																<strong>Select bug patterns to check for选择项</strong>
																<p>在这里你可以选择所要进行检查的相关的Bug Pattern条目 </p>
																<p>可以从Bug codes、Detector name、Detector description中看到相应的是要检查哪些方面的内容，你可以根据需要选择或去掉相应的 检查条件。 </p>
														</li>
												</ol>
												<p>
														<b>总结 </b>
												</p>
												<p>此插件的功能很不错，可以帮助我们提升Java代码的编写能力，写出更加安全可靠的代码。建议使用或加在Ant里进行持续构建。现在，你可以马上拿出你已经开发的一个项目，检查一下你的代码有没有问题了。</p>
										</span>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/44930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2006-05-07 23:53 <a href="http://www.blogjava.net/mlzry0612/articles/44930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>