﻿<?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-Jiangshachina-随笔分类-Eclipse</title><link>http://www.blogjava.net/jiangshachina/category/16093.html</link><description>同是Java爱好者，相逢何必曾相识！&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;a cup of Java, cheers!</description><language>zh-cn</language><lastBuildDate>Wed, 14 Dec 2011 21:03:32 GMT</lastBuildDate><pubDate>Wed, 14 Dec 2011 21:03:32 GMT</pubDate><ttl>60</ttl><item><title>详解Eclipse断点(原)</title><link>http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Sun, 20 Nov 2011 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/364367.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/364367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/364367.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"> </span><div><div align="center"><strong><span style="font-size: 14pt;">详解Eclipse断点</span></strong></div><span style="font-size: 10pt;">大家肯定都用过Eclipse的调试的功能，在调试的过程中自然也无法避免要使用断点(breakpoint)，但不知是否对Eclipse中各类断点都有所了解。本篇图文并茂地介绍了Eclipse中全部类型的断点，及其设置，希望对大家有所帮助。(2011.11.20)</span><br /><br /><strong><span style="font-size: 12pt;">1. 示例程序</span></strong><br /><span style="font-size: 10pt;">BreakpointDemo是一个臆造的应用程序，只是为了便于讲解Eclipse中各类断点的使用罢了。其代码如下图所示，</span><br /><span style="font-size: 10pt;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/01.png" height="738" width="594" /></span><br /><span style="font-size: 10pt;">BreakpointDemo主要包含两个方法：</span><br /><span style="font-size: 10pt;">[1]setValue，该方法根据指定的次数(count)，对成员变量value进行赋值，值的范围为0-9的随机整数。</span><br /><span style="font-size: 10pt;">[2]printValue，该方法会调用setValue()对value进行赋值，并打印出value的值；但，如果value能被3整除，那么就会抛出IllegalArgumentException异常。</span><br /><br /><strong><span style="font-size: 12pt;">2. Line Breakpoint</span></strong><br /><span style="font-size: 10pt;">Line Breakpoin是最简单的Eclipse断点，只要双击某行代码对应的左侧栏，就对该行设置上断点。此处，对第20行代码设置上Line Breakpoint，如下图所示，</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/02.png" height="738" width="594" /><br /><span style="font-size: 10pt;">可以为Line Breakpoint设置一个条件，那么当程序运行到该断点时，只有满足设定的条件，才会被中断。右键点击第20行的断点，选择"Breakpoint Properties..."</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/03.PNG" height="738" width="594" /><br /><span style="font-size: 10pt;">在弹出的属性对话框中，勾选上"Conditional"，然后在文本框中输入"count % 2 == 0"。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/04.PNG" height="543" width="636" /><br /><span style="font-size: 10pt;">该条件表示，当程序运行到第20行时，只有当count为偶数时，程序才会被中断。细心地话，你会发现该断点的图标发生了改变，多了一个问号。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/04_01.PNG" height="738" width="594" /><br /><br /><strong><span style="font-size: 12pt;">3. Watchpoint</span></strong><br /><span style="font-size: 10pt;">Line Breakpoint关注于程序运行的"过程"，大家也常把使用这种断点的调试称为单步调试。但有时候，我们对程序的运行过程不太了解，可能也不太关心，不能确定在什么地方设置断点比较合适，而可能比较关注某个关键变量的变化或使用。此时，就可以为该变量设置一种特殊的断点--Watchpoint。在此示例，我们最关心的就是成员变量value的值，那么就可以为它设置一个Watchpoint，双击第9行代码对应的左侧栏就可以了。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/05.PNG" height="738" width="594" /><br /><span style="font-size: 10pt;">使用在2中所提及的方法，查看该断点的属性，</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/06.PNG" height="543" width="627" /><br /><span style="font-size: 10pt;">默认地，当该变量被访问或它的值被修改时，程序都会被中断。但在本示例中，只希望当对value的值进行修改时程序才需要被中断，所以取消对"Access"的勾选。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/07.PNG" height="543" width="627" /><br /><span style="font-size: 10pt;">这时，我们会发现原来的Watchpoin图标也有变化了。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/08.PNG" height="738" width="594" /><br /><br /><strong><span style="font-size: 12pt;">4. Method Breakpoint</span></strong><br /><span style="font-size: 10pt;">与关注对某个变量的访问与修改一样，我们也可以关注程序对某个方法的调用情况，即，可以设置Method Breakpoint。在此处，设置针对方法setValue的Method Breakpoint。同理，双击第11行代码对应的左侧栏即可。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/09.PNG" height="738" width="594" /><br /><span style="font-size: 10pt;">仍然要查看该断点的属性。默认地，只勾选了"Entry"，而没有勾选"Exit"。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/10.PNG" height="543" width="695" /><br /><span style="font-size: 10pt;">这表示，当刚进入该方法(调用开始)时，程序会被中断；而，离开该方法(调用结束)时，程序并不会被中断。在本示例中，需要同时勾选上"Exit"。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/11.PNG" height="543" width="695" /><br /><span style="font-size: 10pt;">点击OK之后，可以看到该断点的图标也有所改变。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/12.PNG" height="738" width="594" /><br /><span style="font-size: 10pt;">根据这里的设置，当程序运行到第20行后会在第12行被中断，尽管这里没有显式的断点，但这就是setValue()方法的入口(Entry)。必须注意地是，程序在运行到第16行时不会被中断，尽管它看起来像是setValue()方法的出口(Exit)。实际上，程序会在第17行被中断，这里才是setValue()调用结束的地方。</span><br /><br /><strong><span style="font-size: 12pt;">5. Exception Breakpoint</span></strong><br /><span style="font-size: 10pt;">如果，我们期望某个特定异常发生时程序能够被中断，以方便查看当时程序所处的状态。通过设置Exception Breakpoint就能达到这一目标。本示例故意在第23行抛出了IllegalArgumentException异常，我们期望程序运行到此处时会被中断。但我们不直接为此行代码设置Line Breakpoint，而是为IllegalArgumentException设置Exception Breakpoint。设置Exception Breakpoint的方法与其它类型断点都不同，它不能通过双击左侧栏的方式在代码编辑器上直接进行设置。点击Breakpoints视图右上角形如Ji的图标，</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/17.PNG" height="160" width="229" /><br /><span style="font-size: 10pt;">会弹出如下所示的对话框，</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/14.PNG" height="500" width="600" /><br /><span style="font-size: 10pt;">在其中选中IllegalArgumentException，并点击OK，这时一个Exception Breakpoint就设置好了。</span><br /><span style="font-size: 10pt;"></span><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/15.PNG" height="738" width="594" /><br /><div><span style="font-size: 10pt;">当value为3的倍数时，程序会在第23行被中断，这时我们就能使用调试器来看看value具体是等于0，3或6。</span></div><br /><strong><span style="font-size: 12pt;">6. Class Load Breakpoint</span></strong><br /><span style="font-size: 10pt;">还有一种大家平时可能不太用的断点--Class Load Breakpoint，即当某个类被加载时，通过该断点可以中断程序。</span><br /><span style="font-size: 10pt;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/jiangshachina/ec_breakpoints/16.PNG" height="738" width="594" /><br /><br /></span><span style="font-size: 12pt;"><strong>小结</strong></span><span style="font-size: 10pt;"><br />上述的Eclipse断点，我们在现实工作中肯定都有意或无意地使用过其中的几种，只是不一定十分了解内情罢了。使用好Eclipse的各种断点，可以把很好地帮助我们分析程序，定位问题。<br /><br /></span></div><img src ="http://www.blogjava.net/jiangshachina/aggbug/364367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2011-11-20 20:57 <a href="http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效调试：条件化断点(译)</title><link>http://www.blogjava.net/jiangshachina/archive/2009/12/31/307852.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Thu, 31 Dec 2009 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2009/12/31/307852.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/307852.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2009/12/31/307852.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/307852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/307852.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10pt;"><strong><span style="font-size: 14pt;">高效调试：条件化断点</span></strong></span><br />
</div>
<span style="font-size: 10pt;">本文是<a href="http://java.dzone.com/">JavaLobby</a>上的一篇<a href="http://java.dzone.com/tips/effective-debugging">博文</a>，介绍了一个使用Eclipse和NetBeans进行调试的小窍门，我受益良多，也希望对大家有所助益。(2009.12.31最后更新)<br />
<br />
最重要的开发者工作之一就是调试。在我的大学时代，我们被迫使用简单的文本编辑器开发软件，所以开始时，我使用打印语句来观察程序在什么地方出错了。现在，IDE使我们能很便捷地完成这一工作。...<br />
我在Eclipse和NetBeans中见过的最佳特性就是条件化断点思想。这个想法很简单，打上断点，然后输入使调试线程能够停在该断点处的条件。例如，若有如下代码：<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">for</span><span style="color: #000000;">(Employee&nbsp;emp:&nbsp;employees)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(emp.getType()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Employee.MANAGER)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addToManagers(emp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<span style="font-size: 10pt;"><br />
假设，当雇员的getType方法的值为Employee.DEVELOPER时，我想察看所有变量的值，并在单步调试时能确保不会进入IF语句块。<br />
在Eclipse中，你可一如往常那样在IF语句中设置断点，右键点击断点，你将看到如下菜单：<br />
<img src="http://java.dzone.com/sites/all/files/eclipse_breakpoint.PNG" alt="" /><br />
<br />
通过勾选Enable Condition复选框，你可以在结果对话框中为该断点设置一个条件：<br />
<img src="http://java.dzone.com/sites/all/files/eclipse_dialog.PNG" alt="" /><br />
<br />
当你键入条件时，你能获得完全的内容提示。你也能改变条件的意义--当该条件为真时，或者当在最近一次遍历之后值被改变时，是否需要停止。<br />
对于NetBeans，也十分的相似。你仍要右键点击断点以获得属性菜单：<br />
<img src="http://java.dzone.com/sites/all/files/netbeans_breakpoint.PNG" alt="" /><br />
<br />
该对话框也有熟悉的条件，命中次数和内容提示：<br />
<img src="http://java.dzone.com/sites/all/files/netbeans_dialog.PNG" alt="" /><br />
<br />
像这样的特性才能真正地帮助你提升调试的效率--当你知道某个特定的值导致了程序失败时，你就能直捣问题的核心了。<br />
<br />
<strong><span style="color: red;"><span style="font-size: 12pt;">祝大家新年愉快 :-D</span></span></strong><br />
<br />
</span>
<img src ="http://www.blogjava.net/jiangshachina/aggbug/307852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2009-12-31 10:49 <a href="http://www.blogjava.net/jiangshachina/archive/2009/12/31/307852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NetBeans vs. Eclipse RCP: 插件机制比较(译)</title><link>http://www.blogjava.net/jiangshachina/archive/2008/10/15/234341.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Wed, 15 Oct 2008 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2008/10/15/234341.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/234341.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2008/10/15/234341.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/234341.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/234341.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10pt;"><span style="font-size: 14pt;"><strong>NetBeans vs. Eclipse RCP: 插件机制比较</strong></span></span><br />
<span style="font-size: 10pt;"><strong></strong></span></div>
<span><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; 本文是<a href="http://java.dzone.com/">JavaLobby</a>上的<a href="http://java.dzone.com/articles/netbeans-vs-eclipse-rcp-plugin">一篇小文</a>，作者对NetBeans和Eclipse的插件机制进行了一些比较，如有兴趣，可以看看。(2008.10.15最后更新)<br />
<br />
NetBeans与Eclipse处理扩展点及扩展的方式是不同的。让我们看看这些不同之处。请注意，本文仅针对那些对这两个平台的插件机制都具备相当知识的人。</span><br />
<br />
<strong style="font-size: 10pt;">NetBeans Platform:</strong><br />
</span>
<table bgcolor="#000000" border="0" cellpadding="1" cellspacing="1" width="686" height="56">
    <tbody>
        <tr style="background-color: #ffffff;">
            <td style="width: 100px; height: 15px;"><span style="font-size: 10pt;">定义扩展点</span></td>
            <td><span style="font-size: 10pt;">创建一个接口，并将它置入一个公共模块包中。</span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">创建扩展</span></td>
            <td style="width: 573px; height: 21px;"  &="" gt;=""><span style="font-size: 10pt;">创建上述接口的实现，并通过layer.xml文件将它注册到虚拟文件系统中。</span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">读取可用的扩展 </span></td>
            <td><span><span style="font-size: 10pt;">使用<a href="http://bits.netbeans.org/dev/javadoc/org- openide-util/org/openide/util /Lookup.html">org.openide.util.Lookup</a>类去获取上述接口实现的实例。</span><br />
            </span></td>
        </tr>
    </tbody>
</table>
<br />
<span style="font-size: 10pt;"><strong style="font-size: 12pt;"><span style="font-size: 10pt;"><strong>Eclipse RCP:</strong></span><br />
</strong></span>
<table bgcolor="#000000" border="0" cellpadding="2" cellspacing="1" width="876" height="129">
    <tbody>
        <tr style="background-color: #ffffff;">
            <td style="width: 100px; height: 15px;"><span style="font-size: 10pt;">定义扩展点</span></td>
            <td><span style="font-size: 10pt;">创建一个扩展点的描述符方案，该方案定义了扩展点的元素与属性，以及这些元素之间的关系。<br />
            可用的属性类型为：boolean，string，java，resource和identifer。可向该方案的任何部分添加文档。<br />
            最后，向plugin.xml文件 注册你的扩展点。</span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">创建扩展</span></td>
            <td><span><span style="font-size: 10pt;">根据上述方案，在plugin.xml文件中创建一个子部分，在此处向属性赋予值。如果属性类型为java，则也要创建被引用的Java类。</span></span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">读取可用的扩展</span></td>
            <td><span><span style="font-size: 10pt;">使用<a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/runtime_registry.htm">org.eclipse.core.runtime.IExtensionPoint</a>获取扩展的列表。从每个<em><a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/IExtension.html">扩展</a></em>中获取<a href="http: //help.eclipse.org/ganymede/index.jsp?topic= /org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime /IConfigurationElement.html">IConfigurationElement</a>的列表：<br />
            每个IConfigurationElement对应于plugin.xml文件中的一个XML标签。</span></span></td>
        </tr>
    </tbody>
</table>
<br />
<table style="width: 1019px; height: 186px;" bgcolor="#000000" border="0" cellpadding="2" cellspacing="1" width="1019" height="186">
    <tbody>
        <tr style="background-color: #ffffff;">
            <td colspan="2" style="width: 100px; height: 15px;"><span style="font-size: 10pt;"><strong>NetBeans平台</strong></span></td>
            <td colspan="2"><span style="font-size: 10pt;"><strong>Eclipse RCP</strong></span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">优点</span></td>
            <td><span style="font-size: 10pt;">缺点</span></td>
            <td><span style="font-size: 10pt;">优点</span></td>
            <td><span style="font-size: 10pt;">缺点</span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><span style="font-size: 10pt;">非常简单，易于学习</span></td>
            <td><span style="font-size: 10pt;">扩展点没有定义它自己：没有关于是哪个公共模块接口作为扩展点使用的信息。</span></td>
            <td><span><span style="font-size: 10pt;">扩展点清晰地定义了它自己：快速查看jar文件，你就能立即知道该插件提供了哪些扩展点，以及它们是由哪些元素组成的。</span></span></td>
            <td><span style="font-size: 10pt;">比较复杂，需要更多时间去学习</span></td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><br />
            </td>
            <td><span style="font-size: 10pt;">使用的查找名也未作定义</span></td>
            <td><span style="font-size: 10pt;">有许多属性类型：可以在XML文件中描述特定的结果。</span></td>
            <td><br />
            </td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><br />
            </td>
            <td><span style="font-size: 10pt;">扩展和其它的内容都混写在layer.xml文件中：难以确定该模块用于哪些扩展。</span></td>
            <td><span style="font-size: 10pt;">可生成扩展的多数组成部分，见PDE。</span></td>
            <td><br />
            </td>
        </tr>
        <tr style="background-color: #ffffff;">
            <td><br />
            </td>
            <td><br />
            </td>
            <td><span style="font-size: 10pt;">定义好了文档的位置。</span></td>
            <td><br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/jiangshachina/aggbug/234341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2008-10-15 14:40 <a href="http://www.blogjava.net/jiangshachina/archive/2008/10/15/234341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse Weed(原)</title><link>http://www.blogjava.net/jiangshachina/archive/2006/10/12/63436.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Thu, 12 Oct 2006 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2006/10/12/63436.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/63436.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2006/10/12/63436.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/63436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/63436.html</trackback:ping><description><![CDATA[<div align="center">
<font size="4">
<strong><span style="font-size: 14pt;">Eclipse Weed</span></strong></font><br />
</div>
<font size="2">在使用Eclipse的过程中一些小知识的收集，文中的所有描述均在Eclipse3.2环境下。(2006.11.13</font>
<font size="2">最后更新</font>
<font size="2">)<br />
<br />
</font>
<font style="font-weight: bold;" size="3">Eclipse曾经使用过的Workspace的列表</font>
<font size="3">
</font>
<font size="2">
<br />
</font>
<font size="2">文件<span style="color: rgb(0, 0, 255);">eclipse\configuration\.settings\org.eclipse.ui.ide.prefs</span>的<span style="color: rgb(0, 0, 255);">RECENT_WORKSPACES</span>参数记录了该eclipse曾经使用过的工作区(它们的全路径)。<font color="#0000ff">MAX_RECENT_WORKSPACES</font>参数设置了需要被记录的工作区的最多个数(默认值为5)。这些路径的列表会显示在<font color="#0000ff"><font color="#000000">主菜单</font>File--&gt;Switch Workspace...--&gt;Workspace Lanucher</font>中的Workspace下拉列表框内。<br />
<br />
<font size="3"><strong>在启动时使用指定的工作区</strong></font><br />
<font color="#0000ff">eclipse.exe -data <em>Workspace_Full_Path</em></font><br />
注意：使用这种方法使用的工作区不会记录到</font>
<font size="2">
<span style="color: rgb(0, 0, 255);">org.eclipse.ui.ide.prefs</span>
</font>
<font size="2">(见上一主题)中。<br />
这可能是因为在启动时已经明确了工作区，也就不需要在</font>
<font size="2">
<font color="#0000ff">Workspace Lanucher</font>
</font>
<font size="2">选择了，故Eclipse不将该信息记录到配置文件中。<br />
<br />
<font size="3"><strong>Format多个文件</strong></font><br />
这一点其实很简单，<font color="#0000ff">右键点击需要被格式化的文件(或它所在的目录)--&gt;Source--&gt;Format</font>，即可。<br />
注意：<br />
[1]由于该操作没有&#8220;后悔药&#8221;(即不能做undo)，所以在做之前要谨慎。<br />
[2]如果是右键点击某个目录，那么该操作只能影响该目录当前路径下的文件，它子目录中的文件不会被格式化。<br />
<br />
<strong><font size="3">配置外部工具(External Tools)</font></strong><br />
<font size="2">根据Eclipse的帮助可以知道配置外部工具的一般方法（请见<a href="http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-exttools-running.htm">Eclipse3.2帮助</a>）。但对于配置某个特定的外部工具还需要区别对待。</font><font color="#0000ff" size="2"><em>JDK</em>/bin</font><font size="2">中自带的</font><font color="#0000ff" size="2">javap.exe</font><font size="2">可以分解class文件，帮助我们理解程序的执行过程，是一个十分有用的工具。下面就以把</font><font color="#0000ff" size="2">javap.exe</font><font size="2">工具配置为外部工具作为例子进行讲述。<br />
假设有目录结构：<br />
</font></font>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
<font size="2">
<font size="2">
<font size="2">
<span style="color: rgb(0, 0, 0);">Test<br />
&nbsp;|--src<br />
&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|--test<br />
&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--Test.java<br />
&nbsp;|<br />
&nbsp;|--bin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--test<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--Test.class</span>
</font>
</font>
</font>
</div>
<font size="2">
<font size="2">
<font size="2">Test是Eclipse的Java工程；src是源代码目录，其中有源代码test/Test.java文件；bin是输出目录，其中有test/Test.java被编译后生成的test/Test.calss文件。<br />
如果我们仅仅在cmd窗口（而非Eclsipe环境中）使用javap.exe，可以在任何目录下执行如下形式的命令行（前提是已经设置了JAVA_HOME环境变量）：</font>
<font color="#0000ff" size="2">javap -classpath <em>Workspace_Path</em>\Test\bin -c test.Test</font>
<br />
<strong>配置外部工具的步骤：</strong>
<br />
[1]通过主菜单<font color="#006400">Run--&gt;External Tools--&gt;</font><font size="2"><font color="#006400">External Tools...</font>进入外部工具配置向导。<br />
[2]选择<font color="#006400">Program</font>项，并按左上角的新建(<font color="#006400">New Launch Configuration</font>)按钮显示配置对话框。<br />
[3]在<font color="#006400">Name</font>文本框中输入这个External Tool的名称，本处写<font color="#006400">javap</font>。<br />
[4]在<font color="#006400">Location</font>中填入<font color="#0000ff">javap.exe</font>的路径。</font><font size="2">因为<font color="#0000ff">java.exe</font>是工作区之外的程序，所以</font><font size="2">可以通过<font color="#006400">Browse File System...</font>按钮进行选择。<br />
[5]<font color="#006400">Working Directory</font>文本框保持为空。<br />
[6]<font color="#006400">Arguments</font>中要填入执行<font color="#0000ff">javap</font>命令时所需要的参数，这个参数就是前述命令行中的</font><font size="2"><font color="#0000ff">-classpath <em>Workspace_Path</em>\Test\bin -c test.Test</font></font><font size="2">。但我们要使该工具有通用的使用，就不可能将这个参数&#8220;写死&#8221;了。所以需要使用一些变量(Variable)来代替具体的路径。点击按钮<font color="#006400">Variables...</font>可以看到所有的变量，我们需要使用</font><font size="2">workspace_loc，</font><font size="2">project_name和</font><font size="2">java_type_name。最终的完全参数如下所示：</font><br />
<font size="2"><font color="#0000ff">-classpath ${workspace_loc}/${project_name}/bin -c ${java_type_name}</font><br />
</font><font size="2">[7]点击</font><font size="2"><font color="#006400">Apply</font>之后，就可以在工具栏的外部工具按钮(带一把红色小锁的Run图标)中发现一个名为<font color="#0000ff">j<font color="#006400">avap</font></font>的外部工具被添加进去了。</font><font size="2"><br />
[8]选择某一个Java文件，然后点击工具栏上的外部工具按钮，即可对这个Java文件对应的class文件进行分解了。分解信息会显示在控制台中。<br />
</font><font size="2"><strong>注意：</strong>细心的朋友肯定可以发现，上述方法有十分严重的局限性：class文件必须在bin目录下。</font><font size="2">其实对于设置外部工具的确切方法我没有完全弄清楚，主要是不懂各个Variable的确切含义，以及它们的组合规律。</font><font size="2"><br />
<strong>又：</strong><br />
前面已经提到，前述的将<font color="#0000ff">javap.exe</font>配置为外部工具的方法并不很好。关键在于<font color="#006400">Arguments</font>设置的不好，以至于这种方法缺乏足够的弹性。现在我们做一些改进：<br />
将</font></font>
</font>
<font size="2">
<font size="2">
<font size="2">
<font color="#0000ff">-classpath ${workspace_loc}/${project_name}/bin -c ${java_type_name}</font>
</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">修改为<font color="#0000ff">-classpath ${folder_prompt} -c ${java_type_name}</font>。<br />
在这种情况下使用外部工具<font color="#006400">javap</font>，我们需要先<strong><font color="#000000">选中一个Java文件(不能是它的class文件)</font></strong>，然后再<font color="#000000"><strong>运行外部工具javap</strong></font>。运行<font color="#006400">javap</font>时，会出现一个<strong><font color="#000000">路径选择对话框</font></strong>，请选择到<font color="#000000"><strong>class文件(包括它的包路径)所在的根目录</strong></font>。则在此处，这个路径就是</font>
</font>
</font>
<font size="2">
<font size="2">
<font color="#0000ff" size="2">
<em>Workspace_Path</em>\Test\bin</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">(而不是</font>
</font>
</font>
<font size="2">
<font size="2">
<font color="#0000ff" size="2">
<em>Workspace_Path</em>\Test\bin\Test</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">)</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">。<br />
注意：这种方法的自由度已经大大提高，但似乎仍然不太理想。因为我们不仅要选择一个Java文件，还需要选择一个相当于classpath的路径。所以该问题仍然需要继续关注...</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">
<br />
<font size="3">
<strong>
<br />
使用Templat</strong>
</font>
<br />
主菜单<font color="#006400">Preferences...--&gt;Java--&gt;Editor--&gt;Templates</font>，在<font color="#006400">Templates</font>中可以看到一些已创建的模板，均都包含4部分：<br />
Name：模板的名称<br />
Context：模板使用的环境<br />
Description：对该模板功能的简单描述<br />
Auto Insert：(目前还不懂^_^)<br />
在<font color="#006400">Preview</font>文本域中可以看到该模板的通用内容。下面以<strong>foreach模板</strong>为例进行讲述。<br />
Name：foreach，即Enhanced for-Loop，是JDK5.0的新特性之一。<br />
Context：java，即在进行Java编码时使用<br />
Description：iterate over an array or Iterable，即遍历一个数组或一个实现了Iterable接口的对象。<br />
Auto Insert：(无内容)<br />
Preview的内容如下：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(${iterable_type}&nbsp;${iterable_element}&nbsp;:&nbsp;${iterable})&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;${cursor}<br />
}</span></div>
Preview中的内容，其实也就是该模板功能的实现方式。它指示了当使用这个模板时，应该如何生成代码。</font>
</font>
</font>
<font size="2">
<strong>我目前还不知道${}通用元素的使用方法，主要是不知道所有的可被使用的${}通用元素及其意义。</strong>不过根据这些通用元素的名字，我们仍然能够猜测到它的意义：</font>
<font color="#0000ff" size="2">${iterable_type}</font>
<font size="2">，迭代器中包含的元素的类型；</font>
<font size="2">
<font>
<font>
<span style="color: rgb(0, 0, 0);">
<font color="#0000ff">${iterable_element}</font>，声明的一个迭代器中元素的引用变量<font color="#000000">；</font></span>
</font>
</font>
</font>
<font>
<font>
<font>
<font size="2">
<font size="2">
<font size="2">
<span style="color: rgb(0, 0, 0);">
<font color="#0000ff">${iterable}</font>，迭代器对象本身的引用变量；</span>
</font>
</font>
</font>
</font>
</font>
</font>
<font>
<font>
<font>
<font size="2">
<font size="2">
<font size="2">
<span style="color: rgb(0, 0, 0);">
<font color="#0000ff">${cursor}</font>，光标的位置。</span>
</font>
</font>
</font>
</font>
</font>
</font>
<br />
<font size="2">
<font size="2">
<font size="2">
<strong>使用foreach模板：</strong>编辑Java源文件，先写入<font color="#0000ff">foreach</font>，然后再接着使用组合快捷键<font color="#0000ff">Alt+/</font>(使用Content Assist，即内容提示或所谓的智能感知)，此时就会出现foreach模板的提示，单击该提示即可。<br />
<strong>创建模板</strong>，关键也是要弄清楚通用元素的使用方法。但对于不太复杂的模板，也可以不使用/少使用通用元素。不使用通用元素，会使模板的通用性差些。<br />
<br />
<font size="3"><strong><font color="#000000">设置多个Source与Output目录</font></strong></font><br />
通过工程<font color="#006400">Properties--&gt;Java Build Path--&gt;Source<font color="#000000">，可以看到该工程</font></font>的默认Output目录和所有Source目录。<br />
可以通过&#8220;Add Folder...&#8221;或&#8220;Link Folder...&#8221;为工程增加Source目录。<br />
打开已存在的Source目录的树，可以发现<font color="#006400">Output folder</font>，一般它的值为<font color="#006400">Default output folder</font>。选中并编辑它，就可以为这个Source目录选择Output目录了。<br />
<strong>最直接的方法</strong>：<font color="#006400"><font color="#000000">编辑工程根目录下的</font>.classpath</font>文件，在该文件中加入如下形式的语句：<br />
<font color="#0000ff">&lt;classpathentry kind="src" path="<em>源文件目录</em>" output="<em>Output目录</em>"/&gt;</font><br />
即，增加一个Source目录，并为它设置一个Output目录。<br />
工程的默认Output目录的配置语句的形式如下：<br />
<font color="#0000ff">&lt;classpathentry kind="output" path="</font></font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">
<font color="#0000ff">
<em>Output目录</em>
</font>
</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">
<font color="#0000ff">"/&gt;</font>
<br />
即，它不需要对应特定的源文件目录，工程的所有源文件目录都与它关联。<br />
<br />
<font size="3"><strong>指定Eclipse启动画面(Splash)</strong></font><br />
<font color="#0000ff">eclipse.exe -vmargs -Dosgi.splashLocation=<em>Your_Splash_Path</em></font><br />
</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">
<font color="#0000ff">
<em>Your_Splash_Path</em>
</font>
</font>
</font>
</font>
<font size="2">
<font size="2">
<font size="2">就是所指定的启动画面的路径，必须是一张<strong>bmp格式的图片</strong>。<br />
<br />
<font size="3"><strong>为什么Eclipse能够编译出不同版本的class文件？</strong></font><br />
右键点击<font color="#006400">Project--&gt;Java Compiler--&gt;JDK Compilance--&gt;Compilance Level</font>，在这个下拉列表框中可以选择不同的编译级别，目前包括1.3，1.4，5.0和6.0。<br />
Eclipse并不使用当前系统中安装的JDK(JRE)中的编译器(javac)编译工程源代码，而是使用JDT中的编译工具来进行。这也就能够解释，为什么在系统中只安装了JDK1.4.2，但Eclipse仍然能够编译出5.0或6.0的class文件。<br />
虽然Eclipse可以为每个工程选择不同的编译级别，且该编译行为与JDK中的javac无关，但在Eclipse中运行class所需要的JRE却必须是系统中已经安装了的。可以在主菜单<font color="#006400">Window--&gt;Preferences--&gt;Java--&gt;Installed JREs</font>中添加或选择不同的JRE。<br />
<br />
updating...</font>
</font>
</font>
<img src ="http://www.blogjava.net/jiangshachina/aggbug/63436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2006-10-12 11:29 <a href="http://www.blogjava.net/jiangshachina/archive/2006/10/12/63436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse快捷键(摘)</title><link>http://www.blogjava.net/jiangshachina/archive/2006/08/11/63034.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Fri, 11 Aug 2006 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2006/08/11/63034.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/63034.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2006/08/11/63034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/63034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/63034.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Eclipse提供了丰富的快捷键，使用这些快捷键可以极大地提高操作效率。掌握部分常用的快捷键，是掌握Eclipse的一个必然要求。<br>本文并不是Eclipe全部快捷键的列表，而只列举一些本人用过或认为应该学会使用的快捷键。不断更新中...&nbsp;&nbsp;<a href='http://www.blogjava.net/jiangshachina/archive/2006/08/11/63034.html'>阅读全文</a><img src ="http://www.blogjava.net/jiangshachina/aggbug/63034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2006-08-11 16:30 <a href="http://www.blogjava.net/jiangshachina/archive/2006/08/11/63034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>