??xml version="1.0" encoding="utf-8" standalone="yes"?>99re6这里只有精品,日韩精品第一区,亚洲精品久久久久久久久久久久 http://www.aygfsteel.com/wingwing/zh-cnWed, 25 Jun 2025 02:03:49 GMTWed, 25 Jun 2025 02:03:49 GMT60如何在RCP中正加入project explorer viewhttp://www.aygfsteel.com/wingwing/archive/2010/09/16/332201.htmlLi Ya QiangLi Ya QiangThu, 16 Sep 2010 09:02:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/09/16/332201.htmlhttp://www.aygfsteel.com/wingwing/comments/332201.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/09/16/332201.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/332201.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/332201.html
今天都在折腾project explorerQ主要是在RCP里加入project explorer以后Q不能正常显C,同时h的时候又清空那个viewQ非常奇怪?br />
最后按照eclipse.org的help的指D|成功,
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/cnf.htm

主要是要在自qWorkbenchAdvisorc里面重写的initialize(IWorkbenchConfigurer configurer)的方法?br />
 1     public void initialize(IWorkbenchConfigurer configurer) {
 2         IDE.registerAdapters();
 3         final String ICONS_PATH = "icons/full/";
 4         final String PATH_OBJECT = ICONS_PATH + "obj16/";
 5         Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
 6         declareWorkbenchImage(configurer, ideBundle,
 7                 IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT + "prj_obj.gif",
 8                 true);
 9         declareWorkbenchImage(configurer, ideBundle,
10                 IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
11                         + "cprj_obj.gif"true);
12 
13         super.initialize(configurer);
14         configurer.setSaveAndRestore(true);    
15     }
16 
17     private void declareWorkbenchImage(IWorkbenchConfigurer configurer_p,
18             Bundle ideBundle, String symbolicName, String path, boolean shared) {
19         URL url = ideBundle.getEntry(path);
20         ImageDescriptor desc = ImageDescriptor.createFromURL(url);
21         configurer_p.declareImage(symbolicName, desc, shared);
22     }

然后是覆盖getDefaultPageInputҎ(gu)如下

1 @Override
2 public IAdaptable getDefaultPageInput() {
3         return ResourcesPlugin.getWorkspace().getRoot();
4      }


q次得到的教训就是以后有什么问题首先查询eclipse.orgQ要不浪费太多时间了(jin)?br />


Li Ya Qiang 2010-09-16 17:02 发表评论
]]>
PPK on JavaScript W记 4 Q{载)(j)http://www.aygfsteel.com/wingwing/archive/2010/08/21/329553.htmlLi Ya QiangLi Ya QiangSat, 21 Aug 2010 14:42:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329553.htmlhttp://www.aygfsteel.com/wingwing/comments/329553.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329553.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/329553.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/329553.htmlW??准备

准备阶段最重要是关于HTML/CSS和Javascript如何协作的问题?/p>

览器初始化序是首先脚步,然后是statementsQ最后是html?/p>

如果在js里面直接引用body里面的element׃(x)报错Q最好是?strong>执行脚本攑ֈ函数里调?/span>?/p>

function initializePage() {
       
var x = document.getElementById('test');
       x.onclick 
= function () {alert('Hello world!')};
}
window.onload 
= initializePage;



一些常见的钩子

idQ创建钩子最单的Ҏ(gu)Q每个id在文档中只能使用一ơ?img id="Code_Open_Image_223900" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_223900.style.display='none'; Code_Closed_Image_223900.style.display='inline'; Code_Closed_Text_223900.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" height="16" width="11" />


var x = document.getElementById('hook');

classQ可以ؓ(f)一pd的元素初始化相同的行为?/p>

var lists = document.getElementsByTagName('ul');
for (var i=0; i<lists.length; i++) {
    
if (lists[i].className != 'menutree') continue;
    
//初始化行?/span>
}


自定义属性:(x)即不属于(X)HTML规范的属性,q是不合法的Q但有时Z(jin)脚本的方便用它?/p>

var maxLength = this.getAttribute('maxlength');


?值对Q即写成如下的Ş式,然后从className中通过操作字符串获取状态?/p>

<textarea class="maxlength=300"></textarea>


准备面Q设|事件处理程序,定讉K者状态,讄讉KQ生内容,定义关系(relatedElement)Q修Ҏ(gu)档结构?/p>

<script>标签

defer属性:(x)表示正在加蝲中的脚本不包含Q何会(x)改变HTML的指令(如document.writeQ。Explorer仅在面已经完全加蝲之后才会(x)执行拥有defer属性的脚本?/p>

XHTML规定包含内容的script标签必须定义成CDATAQ它?x)告诉XML/HTML解释器不要解析这些内容,而是直接送给脚本引擎?/p>

<script type="text/javascript">
//<![CDATA[
alert('Hello World!');
//]]>
</script>


所有的脚本都被注册到HTML的全局对象中,同一个变量可以在多个脚本中用,且ؓ(f)最后定义的那个?/p>

当浏览器遇到script标签Ӟ发送一个HTTPh去获取脚本文Ӟ解析其中的脚本,对HTML面的分析和渲染暂停Q直到脚本加载完成?/p>

load事g?x)在面完全加蝲时触发,window.onload = ; 多次讄onload?x)覆盖之前的讄Q需要编写函数在同一个元素上讄多个事g处理E序?/p>

{待load时会(x)因ؓ(f)囄{造成延迟Q这个问题很难解冻I目前只有Mozilla支持的DOMContentLoaded事gQ在文档加蝲完成后执行,不必{待囄?/p>






Li Ya Qiang 2010-08-21 22:42 发表评论
]]>
PPK on JavaScript W记 3 Q{载)(j)http://www.aygfsteel.com/wingwing/archive/2010/08/21/329552.htmlLi Ya QiangLi Ya QiangSat, 21 Aug 2010 14:27:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329552.htmlhttp://www.aygfsteel.com/wingwing/comments/329552.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329552.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/329552.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/329552.htmlW??览?/p>

每种览器都包含一个代码引擎或渲染引擎Q它负责解释Web面上的代码Qjavascript解释器是其中的一部分?/p>

Netscape4惨|之后Q网景公怺1998q创立了(jin)Mozilla目Q开发了(jin)Gecko引擎Q现在它支持着Mozilla, Firefox, Netscape, Camino{浏览器?/p>

Explorer的代码引擎叫做TridentQ?999q?月发布的Explorer5.0是第一个支持W3C DOM和XMLHttpRequest的浏览器Q但也是最后一个包含了(jin)主要Javascript更新的Explorer版本?/p>

Safari?003q发布,它用KHTML代码引擎Q它是Macintoshq_的默认浏览器?/p>

Opera是一个独立的览器,在浏览器大战期间Q它没有实现DHTMLQ现在看来,q是一个相当英明的军_?/p>

4U兼Ҏ(gu)问?/p>

不支持:(x)q些出现问题的功能不?#8220;不可或缺”的基功能Q都能够通过对象(g)判断,而且览器也在努力消除这些问题,如document.sytleSheets来读写整个样式表Q目前Safari和Opera也增加了(jin)对其的支持?/p>

合理的不同看法:(x)如defer属性对加蝲脚本的要求,Exploer有独特的理解Q幸好这U问题是最有的?/p>

有意Z的兼Ҏ(gu)问题:(x)通常是浏览器大战的遗留问题,也可以通过对象(g)来判断Q一旦微软着手实现W3C事g标准Q最后一批被故意造成的兼Ҏ(gu)问题也得到解冟?/p>

览器bugQ这是由于编E的~陷造成的不可预见的错误Q它是无法解决也是无法衡量的。如Exploer6?x)被normalize()Ҏ(gu)D崩溃?/p>

览器兼Ҏ(gu)问题是单纯的生zȝ事实Q它不会(x)L消失Q应该尽快地?fn)惯它,臛_听Q它?/p>

在Q何情况下都不要先为某一个浏览器写脚本,然后增加其他览器的支持。在目支出应该解册些兼Ҏ(gu)问题,而不是放在最后?/p>

对象(g)?/p>

对象(g)是避免兼容性问题的最?jng)_手。它的一般方法是(g)查想使用的对象,看它们是否存在,如果不存在,q束函数。(if(!对象)Q,从技术上_(d)对象(g)是把一个对象{换成一个布?yu)(dng)倹{?/p>

(g)查W3C DOMQ?/p>

var W3CDOM = document.createElement && document.getElementsByTagName;


对W3C DOM的检我们可以L假设览器也支持相关的功能,如appendChildQ而省d它的(g)查?/p>

事g处理试Q?/p>

function addEventSimple(obj, evt, fn) {
    
if (obj.addEventListener) //W3C
        obj.addEventListener(evt, fn, false);
    
else if (obj.attachEvent) //微Y
      obj.attachEvent('on' + evt, fn);
}

我们期望未来的版本用标准,所以对标准的支持应该最先检查,事实上先(g)查attachEventQFx{浏览器?x)报错?/p>

览器检?/p>

Z么浏览器(g)行不通?览器兼Ҏ(gu)模式是不断变化的,今天不支持的属性,明天可能?x)支持;而且览器常怼(x)伪装自己的n份,以便通过览器检?/p>

览器检的军备竞赛

navigator.userAgent中保存了(jin)每一个浏览器的识别字W串?995q前后的Mosaic和Netscapeq代中,׃ Netscape的cookie?lt;center>标签{的支持Q服务器端的E序员决定用浏览器(g)来区分两种览器,他们(g)识别字W串 是否从Mozilla/开始,q给javascript世界带来?jin)不必要的磨难。浏览器厂商被迫自q识别字符串变成从Mozilla/开始,即便? Explorer最初进入市(jng)场时也将自己伪装成了(jin)Netscape。浏览器大战开始后QW(xu)eb开发者们做出反应Q他们创Z(jin)更多的浏览器E序来区? Netscape和ExploerQ而当战争l束Ӟ已经有数不清的网站设|了(jin)(g)脚本只允许Explorer讉KQ历史重演了(jin)Q一些浏览器? OperaQ又不得不修改自q识别字符串来匚wExplorerQ甚臛_识别字符串的讄开攄用户?/p>

拆解览器字W串

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915
Mozilla
/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Mozilla
/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.6
Mozilla
/4.0 (compatible; MSIE 6.0; Windows NT 5.2)

W一个是Mozilla1.7.12Q第二个是NT5.1(即XP)的Explorer6.0Q第三个是Safari1.3.2Q第四个是伪装后的Safari1.3.2?/p>

userAgentQ用navigator.userAgentQ而不是navigator.appName和navigator.appVersion。前者尚有一些遵循,后者都是谎aQ?/p>

Mozilla/Q只能证明浏览器?994q后发布的;

/[version number]Q没有意义,每一个现代浏览器都生命是W?版或W?版的MozillaQ?/p>

不规则字W串Q通常被圆括号包围Q包含这非常复杂的羃写;

OperaQ唯一支持window.opera属性,可以(g)这个对象来判断Q?/p>

Safari, iCab和KonquerorQ不像Opera那样勇于承担风险Q它们可以完全地伪装自己Q?/p>

GeckoQMozilla识别串通常都会(x)包含GeckoQ但不幸Safari{也包含Q?/p>

MSIEQ没有意义,l大多数的浏览器都包含MSIEQ?/p>

版本P(x)Exploer和Opera允许在名字后面找到自q版本P而其他浏览器都无效,比如Mozilla的隐藏版本;

操作pȝQWindows操作pȝ都以Win开始,当然q不适用于伪装的丌Ӏ?/p>

(http://www.quirksmode.org/js/detect.html)

览器检的正确使用

当你需要知道访问者的览器,如站点统计时Q这些检不?x)?jing)响脚本逻辑?/p>

当我们用对象(g)时需要排除浏览器bug{时Q可以将对象(g)和览器检一起用?/p>

调试

Mozilla有最好的错误信息Q因此多在Mozilla中调试;

使用returnQalertQconfirm是不错的Ҏ(gu)Q复杂的调试可以自己创徏一个错误控制台Q?/p>

bug报告l浏览器厂商?span style="color: #000000;">



Li Ya Qiang 2010-08-21 22:27 发表评论
]]>
PPK on JavaScript W记 2Q{载)(j)http://www.aygfsteel.com/wingwing/archive/2010/08/21/329551.htmlLi Ya QiangLi Ya QiangSat, 21 Aug 2010 14:21:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329551.htmlhttp://www.aygfsteel.com/wingwing/comments/329551.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329551.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/329551.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/329551.html

W二?大背?/span>

javascript嵌入在一个还同时使用着HTML和CSS的环境中?/span>

 

2002q_(d)Stuart Langridge提出无R入脚本编E?unobtrusive scripting)。它代表?jin)向ZCSS的、兼Ҏ(gu)准的Web站点的新理论中嵌入Javascript的首ơ认真的试?/span>

它应该是可用的。即l网站带来明的可用性好处?/span>

它应该是可访问的。如果javascript失效Q网应该依然是可阅d可理解的?/span>

它应该是Ҏ(gu)实现的。Web开发者只需要在面中引入脚本本w和一个Javascript钩子Q脚本就能运行?/span>

它应该是分离的。只存在于自q.js文g中,而不是散落在HTML中?/span>

 

一个Web面由如下三个层l成QHTMLl构层、CSS表现层、Javascript行ؓ(f)层?/span>

 

表现与结构的分离

所有的表现定义在一个单独的CSS文g中,HTML中不再出?lt;font>标签和用于表现的表格。一般通过脚本改变className来引用不同的

CSS元素?/span>CSS (display: none)用来表示文档中的某个元素隐藏Q也可以通过脚本从文档中删除q个元素。至于采用哪U方式,PPK推荐采用后一U方式。特别是对于form表单的时候,采用W一U方式就?x)提交很多无用的信息?br />

 

行ؓ(f)与结构的分离

所有的javascript函数都被攑֜一个独?js文g中,然后把它铑օ所需要它的HTML面中,HTMLU除所有的事g处理E序?/span>

钩子(hook)用来生命“在这里准备部|行?#8221;的IDQ它是注册事件处理程序的一U方法?/span>

javascript:伪协议是复杂而肮脏的(<a href="javascript:dosomeaction()">)Q应该放到脚步文件中?br />

 

行ؓ(f)和表现的分离

行ؓ(f)和表现的分离是复杂的Q尚没有M的标准?/span>

当若q元素部|相同的效果ӞCSS是有效的Q而需要创建相g不完全相同的效果Ӟjavascript是最有效的方法?/span>

 

可访问性规?/span>

条理分明的HTMLQ如编码的链接必须有href?/span>

产生对脚本用h意义的内容,如:(x)

一条发送ajaxh的链接可以完全用javascript生成Q这h脚本用户׃?x)看到href?的a标签而生不解;

用javascript来隐藏一D内容,而不是用cssQ否则无脚本用户永q看不到那是什么;

判断是否脚本可用Q然后蟩转到一个无脚本面Ӟ要用location.replace而不是location.hrefQ这样在后退时不?x)再q回到有脚本面Q事实上location.href产生?jin)一条历史记录;

针对键盘用户Q我们对触发事g的元素增加focus动作Q?/span>

׃各浏览器都支持(但不完全支持QjavascriptQ因?lt;noscript>标签显得没有意义,最好完全不用?/span>

 



Li Ya Qiang 2010-08-21 22:21 发表评论
]]>
PPK on JavaScript W记 1Q{载)(j)http://www.aygfsteel.com/wingwing/archive/2010/08/21/329550.htmlLi Ya QiangLi Ya QiangSat, 21 Aug 2010 14:14:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329550.htmlhttp://www.aygfsteel.com/wingwing/comments/329550.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/08/21/329550.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/329550.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/329550.html W一章:(x)目标

javascript的目标是lWeb面增加一个额外的可用性层?/span>

 

js分ؓ(f)6个部分:(x)javascript核心(j)、BOM(览器对象模?、事件、DOM(文档对象模型)、CSS修改、数据检?XMLHttpRequest)?/span>

他们的Q务:(x)核心(j)使得js成ؓ(f)一门编E语a的基Q控制结构变量函数和? 象;BOMl浏览器H口下达指o(h)Q读取cookieQ与其他H口q行通信Q事件找出用h行的动作Qƈ定义q些动作触发的函数QDOM学习(fn)和改? HTML文档的结构;CSS学习(fn)和改变HTML文档的CSS表现Q数据检索从服务器下载新的数据而不h面?/span>

所有的脚本都是用核?j)语a、事件和DOMQ等待行动,q更新页面?/span>

 

ECMA(Ƨ洲计算机制造联合协?对javascript核心(j)q行标准?ECMA1.5)Q这个标准应用到flash、浏览器、服务器以及(qing)其他未产生的应用上?/span>

W3C(万维|协?创徏?jin)DOM规范Q它也包括事件处理和CSS修改的内宏V微软仍然没有实现W3C的事件规范,却用它自己专有的事件模型?/span>

WHAT-WG(Web文本应用技术工作组)正ؓ(f)BOM标准而工作?/span>

数据(g)索用的则是微Y的事实标准,W(xu)3C为数据检索推Z(jin)XMLHttpRequest规范的第一部草案?/span>

 

<script标签中允许在language="javascript1.2"中指定版本号Q但?.2版本开始Netscape和Explorer 4都宣U支持,因此讄版本h有意义,事实上根本不需要这个属性?/span>

 

js遵@严格的安全规?/span>

不允许访问宿主计机Q不能读写除cookie外的文gpȝ

同源{略Q两个窗口的面的Web域名必须相同Q才允许跨窗口通信。同子域下可以通过讄相同的document.domain(必须讄为真实域名的一部分)q行通信?/span>

其他限制Q不能读取历史对象的属?当可以在历史中后退)Q不能设|文件上传表单域的|试图关闭H口时会(x)询问用户Q不允许打开一个小?00x100或处于屏q之外或没有标题栏的新窗口?/span>

 

javascript的历?/span>

创始人Brendan Eich当时在Netscape工作Qjs公开的历史从1996.3的Netscape2发布开始?/span>

Eich最初的目标是ؓ(f)Web开发者提供一U简单的方式为页面增加一些交互,q些 脚本从其他页面复制过来ƈE作调整可以用。最初命名ؓ(f)LiveScript。但NetscapeZ?jng)场的考虑选取?jin)一个与当时行的Java怼? 一个名字,q仓?j)地要求Eich“使这个语a看v来想Java”Q从而误gh们将js视ؓ(f)轻量U的Java版本Q看成一个可以拿来搬弄技巧而不值得引v? 谨的E序员注意的dy的脚本语a?/span>

 

W一瘦时?/span>

早期的日子里Q浏览器是一个瘦客户端,表单验证和鼠标滑q的效果是o(h)人惊艳的Q但它们不允许在客户端大量进行交互,用户被迫与服务端交互?/span>

1996~1999间Netscape与微软的览器大战开始,双方都推?gu)q W?版,Z夺CSS规范各不相让。两个浏览器厂商都让javascript可以控制q些CSS声明Q于是就可以使用position:absolute 创徏一?#8220;?#8221;Q然后通过持箋地改变top和left似的它在屏幕上移动,q才叫酷Q这些小伎俩被冠以DHTMLZh所知,即通过javascript? 改变css属性?/span>

为此双方都推Z(jin)自己专有的DOMQ又U过渡DOMQ介于Netscap3DOM和W(xu)3CDOM之间Q,Netscape4支持document.layersQ而Explorer支持document.all?/span>

 

W一个胖阶段

有了(jin)q些新特性,客户端增加大量的互动Q动甅R隐藏和其他视觉效果Qjavascript的目标{向技术,而不是可用性,jsq入胖阶Dc(din)?/span>

微Y?999q发布Explorer5Q相当好地支持了(jin)CSS和新的W3CDOM标准。尽公司和W(xu)eb开发者尽力挽救,Netscape4q是灭亡?jin),差不多同一旉Qjs的第一个胖阶段l束Qh们发现的不过是少量的javascript和大量的I?/span>

CSS变革开始?/span>

 

W二个瘦阶段

览器大战接q尾声的时候,W(xu)eb开发者们厌倦了(jin)大量的编E和变通做法,极度地想从头开始。CSSQ而不是javascriptQ给?jin)他们最好的Z(x)来完全突破过ȝ束缚(x)?/span>

大概?003q开始,一部分先锋开始用一U深受CSS革命理念影响的新方式写javascriptQjavascriptW一ơ深深地潜入到全面的Web开发理Z去,而可讉K性问题终于被认识到ƈ着手解冟?/span>

无R入脚本编E提出,但ƈ没有立即征服世界?/span>

 

W二个胖阶段

从服务器端?zhn)?zhn)地载入块的数据,唤醒?jin)沉睡多q的技术构思和可用性观 念,Jesse James Garrett的文章《AjaxQWeb应用E序的新Ҏ(gu)》开创了(jin)Ajax时代Qjavascript的用途又一ơ被重新定义Q传lweb开发者创建的? 瘦的可访问的qp的js代码Q而来自服务端开发的“资深E序员们”创徏的是面向对象的,胖的Q可讉K性差的ajax客户端。焦点又被集中在技术方面,? 用性及(qing)Z么要用ajax仍很被xQ臃肿的?xӞ(j)与日俱增?/span>

所q思h们都开始同意ƈ遵@已经存在的标准?/span>

 

2006.5数据昄Q目前共有至?34中Ajax框架Q我个h认ؓ(f)q股热潮已经到达?jin)顶峎ͼ有谁需?34U程序去做本质上是一L(fng)事呢Q?/span>

javascript调整回瘦阶D,那时它的用途也再ơ被重新定义Q当然某个时期第三个瘦阶D늻束后?x)迎来第三个胖阶D?. 从根本上Q这U情况只有当每个人都只认同唯一的javascript用途时才会(x)被打破?/span>



Li Ya Qiang 2010-08-21 22:14 发表评论
]]>
Q{帖)(j)DOS Batch 命o(h)http://www.aygfsteel.com/wingwing/archive/2010/06/22/324135.htmlLi Ya QiangLi Ya QiangTue, 22 Jun 2010 03:20:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/06/22/324135.htmlhttp://www.aygfsteel.com/wingwing/comments/324135.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/06/22/324135.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/324135.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/324135.html1 echo ?@
回显命o(h)
@                     #关闭单行回显
echo off              #从下一行开始关闭回?br /> @echo off             #从本行开始关闭回显。一般批处理W一行都是这?br /> echo on               #从下一行开始打开回显
echo                  #昄当前?echo off 状态还?echo on 状?br /> echo.                 #输出一?#8221;回R换行”Q空白行
                         #(同echo, echo; echo+ echo[ echo] echo/ echo)


2 errorlevel
echo %errorlevel%
每个命o(h)q行l束Q可以用q个命o(h)行格? 查看q回?br /> 默认gؓ(f)0Q一般命令执行出错会(x)?errorlevel ?


3 dir
昄? 件夹内容
dir                  #昄当前目录中的文g和子目录
dir /a               #昄当前目录中的文g和子目录Q包括隐藏文件和pȝ文g
dir c: /a:d          #昄 C 盘当前目录中的目?br /> dir c: /a:-d         #昄 C 盘根目录中的文g
dir c: /b/p         #/b只显C文件名Q?p分页昄
dir *.exe /s         #昄当前目录和子目录里所有的.exe文g


4 cd
切换目录
cd                  #q入根目?br /> cd                   #昄当前目录
cd /d d:sdk         #可以同时更改盘符和目?/span>

5 md
创徏目录
md d:abc          #如果 d:a 不存在,会(x)自动创徏中目录
#如果命o(h)扩展名被停用Q则需要键? mkdir abc?br />

6 rd
删除目录
rd abc               #删除当前目录里的 abc 子目录,要求为空目录
rd /s/q d:temp      #删除 d:temp 文g夹及(qing)其子文g夹和文gQ?q安静(rn)模式


7 del
删除? ?/span>
del d:test.txt      #删除指定文gQ不能是隐藏、系l、只L?br /> del /q/a/f d:temp*.*
删除 d:temp 文g多w面的所有文Ӟ包括隐藏、只诅R系l文Ӟ不包括子目录
del /q/a/f/s d:temp*.*
删除 d:temp ?qing)子文g多w面的所有文Ӟ包括隐藏、只诅R系l文Ӟ不包括子目录


8 ren
重命名命?/span>
ren d:temp tmp      #支持Ҏ(gu)件夹的重命名

9 cls
清屏

10 type
? C文件内?br /> type c:boot.ini     #昄指定文g的内容,E序文g一般会(x)昄q
type *.txt           #昄当前目录里所?txt文g的内?/span>

11 copy
? 贝文?br /> copy c:test.txt d:test.bak
复制 c:test.txt 文g? d: Qƈ重命名ؓ(f) test.bak
copy con test.txt
从屏q上{待输入Q按 Ctrl+Z l束输入Q输入内容存为test.txt文g
con代表屏幕Qprn代表打印机,nul代表I?br /> copy 1.txt + 2.txt 3.txt
合ƈ 1.txt ?2.txt 的内容,保存?3.txt 文g
如果不指?3.txt Q则保存?1.txt
copy test.txt +
复制文g到自己,实际上是修改?jin)文件日?/span>

12 title
? |cmdH口的标?/strong>
title 新标?nbsp;        #可以看到cmdH口的标题栏变了(jin)


13 ver
昄pȝ版本

14 label ?vol
? |卷?br /> vol                  #昄h
label                #昄hQ同时提C入新h
label c:system       #讄C盘的h?system

15 pause
暂停命o(h)

16 rem ?::
? 释命?/strong>
注释行不执行操作

17 date ?time
? 期和旉
date           #昄当前日期Qƈ提示输入新日期,?回R"略过输入
date/t         #只显C当前日期,不提C入新日期
time           #昄当前旉Qƈ提示输入新时_(d)?回R"略过输入
time/t         #只显C当前时_(d)不提C入新旉


18 goto ?:
? 转命?br /> :label         #行首?表示该行是标{行Q标{行不执行操?br /> goto label     #跌{到指定的标签那一?/span>

19 find (外部命o(h))
? 扑֑?br /> find "abc" c:test.txt
?c:test.txt 文g里查扑֐ abc 字符串的?br /> 如果找不刎ͼ设 errorlevel q回码ؓ(f)1
find /i “abc” c:test.txt
查找? abc 的行Q忽略大写
find /c "abc" c:test.txt
昄?abc 的行的行?/span>

20 more (外部命o(h))
? 屏显C?br /> more c:test.txt     #逐屏昄 c:test.txt 的文件内?/span>

21 tree
? C目录结?br /> tree d:             #昄D盘的文g目录l构

22 &
序执行多条命o(h)Q而不命令是否执行成?br />
23 &&
? 序执行多条命令,当碰到执行出错的命o(h)后将不执行后面的命o(h)
find "ok" c:test.txt && echo 成功
如果扑ֈ?ok"字样Q就昄"成功"Q找不到׃昄


24 ||
? 序执行多条命令,当碰到执行正的命o(h)后将不执行后面的命o(h)
find "ok" c:test.txt || echo 不成?br /> 如果找不?ok"字样Q就昄"不成?Q找C(jin)׃昄

25 |
? 道命?/strong>
dir *.* /s/a | find /c ".exe"
道命o(h)表示先执?dir 命o(h)Q对其输出的l果执行后面?find 命o(h)
该命令行l果Q输出当前文件夹?qing)所有子文g多w?exe文g的个?br /> type c:test.txt|more
q个?more c:test.txt 的效果是一L(fng)


26 > ?>>
? 出重定向命o(h)
> 清除文g中原有的内容后再写入
>> q加内容到文件末,而不?x)清除原有的内?br /> 主要本来显C在屏幕上的内容输出到指定文件中
指定文g如果不存在,则自动生成该文g
type c:test.txt >prn
屏幕上不昄文g内容Q{向输出到打印?br /> echo hello world>con
? 屏幕上显Chello worldQ实际上所有输出都是默?>con ?br /> copy c:test.txt f: >nul
? 贝文Ӟq且不显C?文g复制成功"的提CZ息,但如果f盘不存在Q还是会(x)昄出错信息
copy c:test.txt f: >nul 2>nul
不显C?#8221;文g复制成功”的提CZ息,q且f盘不存在的话Q也不显C错误提CZ?br /> echo ^^W ^> ^W>c:test.txt
生成的文件内容ؓ(f) ^W > W
^ ?> 是控制命令,要把它们输出到文Ӟ必须在前面加?^ W号

27 <
? 文g中获得输入信息,而不是从屏幕?/strong>
一般用?date time label {需要等待输入的命o(h)
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
q? 样就可以不等待输入直接修改当前日?br />

28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
? 令行传递给批处理的参数
%0 批处理文件本w?br /> %1 W一个参?br /> %9 W九(ji)个参?br /> %* 从第一个参数开始的所有参?br />
批参?%n)的替代已被增强。?zhn)可以使用以下语?

     %~1          - 删除引号(")Q扩?%1
     %~f1         - ?%1 扩充C个完全合格的路径?br />      %~d1         - 仅将 %1 扩充C个驱动器?br />      %~p1         - 仅将 %1 扩充C个\?br />      %~n1         - 仅将 %1 扩充C个文件名
     %~x1         - 仅将 %1 扩充C个文件扩展名
     %~s1         - 扩充的\径指含有短名
     %~a1         - ?%1 扩充到文件属?br />      %~t1         - ?%1 扩充到文件的日期/旉
     %~z1         - ?%1 扩充到文件的大小
     %~$PATH : 1 - 查找列在 PATH 环境变量的目录,q将 %1
                   扩充到找到的W一个完全合格的名称。如果环?br />                    变量名未被定义,或者没有找到文Ӟ此组合键?br />                    扩充到空字符?br />
可以l合修定W来取得多重l果:

    %~dp1        - 只将 %1 扩展到驱动器号和路径
    %~nx1        - 只将 %1 扩展到文件名和扩展名
    %~dp$PATH:1 - 在列?PATH 环境变量中的目录里查?%1Q?br />                    q扩展到扑ֈ的第一个文件的驱动器号和\径?br />     %~ftza1      - ?%1 扩展到类?DIR 的输?gu)?br /> 可以参照 call/? ?for/? 看出每个参数的含?br /> echo load "%%1" "%%2">c:test.txt
生成的文 件内容ؓ(f) load "%1" "%2"
批处理文仉Q用q个格式把命令行参数输出到文?br />

29 if
? 断命?br /> if "%1"=="/a" echo W一个参数是/a
if /i "%1" equ "/a" echo W一个参数是/a
/i 表示不区分大写Qequ ?== 是一L(fng)Q其它运符参见 if/?
if exist c:test.bat echo 存在c:test.bat文g
if not exist c:windows (
     echo 不存在c:windows文g?br />      )
if exist c:test.bat (
     echo 存在c:test.bat
     ) else (
     echo 不存在c:test.bat
     )

30 setlocal ?endlocal
讄”命o(h)扩展?#8221;?#8221;延缓环境变量扩充”
SETLOCAL ENABLEEXTENSIONS             #启用"命o(h)扩展?
SETLOCAL DISABLEEXTENSIONS            #停用"命o(h)扩展?
SETLOCAL ENABLEDELAYEDEXPANSION       #启用"延缓环境变量扩充"
SETLOCAL DISABLEDELAYEDEXPANSION      #停用"延缓环境变量扩充"
ENDLOCAL                              #恢复C用SETLOCAL语句以前的状?br /> “命o(h)扩展?#8221;默认为启?br /> “? ~环境变量扩?#8221;默认为停?br /> 批处理结束系l会(x)自动恢复默认?br /> 可以修改注册表以用"命o(h)扩展?Q详?cmd /? 。所以用?命o(h)扩展?的程
序,在开头和l尾加上 SETLOCAL ENABLEEXTENSIONS ?ENDLOCAL 语句Q以?br /> 保程序能在其它系l上正确q行
"延缓环境变量扩充"主要用于 if ?for 的符合语句,?set 的说明里有其实用例程

31 set
讄变量
引用变量可在变量 名前后加 % Q即 %变量?
set                     #昄目前所有可用的变量Q包括系l变量和自定义的变量
echo %SystemDrive%      #昄pȝ盘盘W。系l变量可以直接引?br /> set p                   #昄所有以p开头的变量Q要是一个也没有perrorlevel=1
set p=aa1bb1aa2bb2      #讄变量pQƈ赋gؓ(f) = 后面的字W串Q即aa1bb1aa2bb2
echo %p%                #昄变量p代表的字W串Q即aa1bb1aa2bb2
echo %p:~6%             #昄变量p中第6个字W以后的所有字W,即aa2bb2
echo %p:~6,3%           #昄W?个字W以后的3个字W,即aa2
echo %p:~0,3%           #昄?个字W,即aa1
echo %p:~-2%            #昄最后面?个字W,即b2
echo %p:~0,-2%          #昄除了(jin)最?个字W以外的其它字符Q即aa1bb1aa2b
echo %p:aa=c%           #用c替换变量p中所有的aaQ即昄c1bb1c2bb2
echo %p:aa=%            #变量p中的所有aa字符串置换ؓ(f)I,xC?bb12bb2
echo %p:*bb=c%          #W一个bb?qing)其之前的所有字W被替换为cQ即昄c1aa2bb2
set p=%p:*bb=c%         #讄变量pQ赋gؓ(f) %p:*bb=c% Q即c1aa2bb2
set /a p=39             #讄p为数值型变量Qgؓ(f)39
set /a p=39/10          #支持q算W,有小数时用去法Q?9/10=3.9Q去־3Qp=3
set /a p=p/10           #?/a 参数Ӟ?= 后面的变量可以不?直接引用
set /a p=”1&0″          #”?#8221;q算Q要加引受其它支持的q算W参见set/?
set p=                  #取消p变量
set /p p=误?br /> 屏幕上显C?#8221;误?#8221;Qƈ?x)将输入的字W串赋值给变量p
注意q条可以用来取代 choice 命o(h)
注意变量?if ? for 的复合语句里是一ơ性全部替换的Q如
@echo off
set p=aaa
if %p%==aaa (
     echo %p%
     set p=bbb
     echo %p%
     )
l果显C?br /> aaa
aaa
? 为在d if 语句时已l将所?%p% 替换为aaa
q里?替换"Q在 /? 帮助里就是指"扩充"?环境变量扩充"
可以启用” 延缓环境变量扩充”Q用 ! 来引用变量,?!变量?
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
     echo %p%
     set p=bbb
     echo !p!
     )
ENDLOCAL
l果显C?br /> aaa
bbb
q? 有几个动态变量,q行 set 看不?br /> %CD%                   #代表当前目录的字W串
%DATE%                 #当前日期
%TIME%                 #当前旉
%RANDOM%               #随机整数Q介?~32767
%ERRORLEVEL%           #当前 ERRORLEVEL ?br /> %CMDEXTVERSION%        #当前命o(h)处理器扩展名版本?br /> %CMDCMDLINE%           #调用命o(h)处理器的原始命o(h)?br /> 可以? echo命o(h)查看每个变量|?echo %time%
注意 %time% _到毫U,在批处理需要g时处理时可以用到

32 start
? 处理中调用外部程序的命o(h)Q否则等外部E序完成后才l箋执行剩下的指?/strong>

33 call
批处理中调用另外一个批处理的命令,否则剩下的批处理指o(h)不?x)被? ?br /> 有时有的应用E序用start调用出错的,也可以call调用

34 choice (外部命o(h))
? 择命?br /> 让用戯入一个字W,从而选择q行不同的命令,q回码errorlevel?234……
win98 里是choice.com
win2000pro里没有,可以从win98里拷q来
win2003里是choice.exe
choice /N /C y /T 5 /D y>nul
延时5U?/span>

35 assoc ?ftype
文g? ?br /> assoc 讄'文g扩展?兌Q关联到'文gcd'
ftype 讄'文gcd'兌Q关联到'执行E序和参?
? 你双M?txt文gӞwindowsq不是根?txt直接判断?notepad.exe 打开
而是先判?txt属于 txtfile '文gcd'
再调?txtfile 兌的命令行 txtfile=%SystemRoot%system32NOTEPAD.EXE %1
? 以在"文g多w项"→"文gcd"里修改这2U关?br /> assoc            #昄所?文g扩展?兌
assoc .txt       #昄.txt代表?文gcd'Q结果显C?.txt=txtfile
assoc .doc       #昄.doc代表?文gcd'Q结果显C?.doc=Word.Document.8
assoc .exe       #昄.exe代表?文gcd'Q结果显C?.exe=exefile
ftype            #昄所?文gcd'兌
ftype exefile    #昄exefilecd兌的命令行Q结果显C?exefile="%1" %*
assoc .txt=Word.Document.8
讄.txt为wordcd的文档,可以看到.txt文g的图标都变了(jin)
assoc .txt=txtfile
恢复.txt的正关?br /> ftype exefile="%1" %*
恢复 exefile 的正关?br /> ? 果该兌已经被破坏,可以q行 command.com Q再输入q条命o(h)

36 pushd ?popd
? 换当前目?br /> @echo off
c: & cd & md mp3        #? C: 建立 mp3 文g?br /> md d:mp4                #?D: 建立 mp4 文g?br /> cd /d d:mp4             #更改当前目录?d:mp4
pushd c:mp3             #保存当前目录Qƈ切换当前目录?c:mp3
popd                     #恢复当前目录为刚才保存的 d:mp4

37 for
? 环命?br /> q个比较复杂Q请对照 for/? 来看
for %%i in (c: d: e: f:) do echo %%i
依次调用括号里的每个字W串Q执?do 后面的命?br /> 注意%%iQ在批处理中 for 语句调用参数??
? 认的字符串分隔符?I格?Q?Tab?Q?回R?
for %%i in (*.txt) do find "abc" %%i
? 当前目录里所有的txt文g执行 find 命o(h)
for /r . %%i in (*.txt) do find "abc" %%i
? 当前目录和子目录里所有的.txt文g中搜索包?abc 字符串的?br /> for /r . %%i in (.) do echo %%~pni
? C当前目录名和所有子目录名,包括路径Q不包括盘符
for /r d:mp3 %%i in (*.mp3) do echo %%i>>d:mp3.txt
?d:mp3 ?qing)其子目录里的mp3文g的文件名都存?d:mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开_(d)8是结,1表示每次?
for /f %%i in ('set') do echo %%i
?set 命o(h)的输出结果@环调用,每行一?br /> for /f "eol=P" %%i in ('set') do echo %%i
?set 命o(h)的输出结果,忽略?P 开头的那几?br /> for /f %%i in (d:mp3.txt) do echo %%i
昄 d:mp3.txt 里的每个文g名,每行一个,不支持带I格的名U?br /> for /f "delims=" %%i in (d:mp3.txt) do echo %%i
昄 d:mp3.txt 里的每个文g名,每行一个,支持带空格的名称
for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a
?dir 命o(h)的结果,跌前面5行,余下的每行取W??br /> 每列之间的分隔符为默认的"I格"
可以注意?dir 命o(h)输出的前5行是没有文g名的
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
     echo %%a
     echo %%b
     echo %%c
     )
? date /t 的输出结果,每行????br /> W一列对应指定的 %%a Q后面的 %%b ?%%c 是派生出来的Q对应其它列
? 隔符指定?- ?I格"Q注?delims=- 后面有个"I格"
其中 tokens=1,2,3 若用 tokens=1-3 替换Q效果是一L(fng)
for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b
? W?列给 %%a Q其后的列都l?%%b


38 subst (外部命o(h))
映射盘?/span>
subst z: serverd      #q样输入z:可以访问serverd?br /> subst z: /d              #取消该映?br /> subst                    #昄目前所有的映时

39   xcopy (外部命o(h))
? 件拷?/strong>
xcopy d:mp3 e:mp3 /s/e/i/y
复制 d:mp3 文g夏V所有子文g夹和文g?e: Q覆盖已有文?br /> ?/i 表示如果 e: 没有 mp3 文g夹就自动新徏一个,否则?x)有询?/span>

Li Ya Qiang 2010-06-22 11:20 发表评论
]]>
【{载】?Iterator 或for-each注意Qjava.util.ConcurrentModificationExceptionhttp://www.aygfsteel.com/wingwing/archive/2010/03/02/314300.htmlLi Ya QiangLi Ya QiangTue, 02 Mar 2010 08:50:00 GMThttp://www.aygfsteel.com/wingwing/archive/2010/03/02/314300.htmlhttp://www.aygfsteel.com/wingwing/comments/314300.htmlhttp://www.aygfsteel.com/wingwing/archive/2010/03/02/314300.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/314300.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/314300.html
在用Iterator处理CollectionӞ注意java.util.ConcurrentModificationException?br /> 1.如果你仅仅是对collectionq行遍历查询Q那么不必担?j)什么?br /> 2.但如果你在遍历过E中要对collectionq行删除Q那么你p注意?jin)?br /> For example:
private void testDel() {  
  1.     List<String> list = new ArrayList<String>();  
  2.     for (int i = 0; i < 10; i++) {  
  3.         String str = "td" + i;  
  4.         list.add(str);  
  5.     }  
  6.   
  7.     for (Iterator it = list.iterator(); it.hasNext();) {  
  8.         String str = (String) it.next();  
  9.         if (str.equals("td5")) {  
  10.             // list.remove(str);  // 删除Ҏ(gu)一 
  11.             it.remove();  // 删除Ҏ(gu)?nbsp;
  12.         }  
  13.     }  

上面的代码运行没有问题,但如果你?#8220;Ҏ(gu)一”替代“Ҏ(gu)?#8221;Q则?x)出? java.util.ConcurrentModificationException?br /> Q用for-each遍历也会(x)ZcM问题Q?br /> 具体原因是可以看一?span style="color: rgb(0, 0, 0);">先看看List中的removeҎ(gu)源码Q?br />
  1. public boolean remove(Object o) {  
  2.     if (o == null) {  
  3.         for (int index = 0; index < size; index++)  
  4.             if (elementData[index] == null) {  
  5.                 fastRemove(index);  
  6.                 return true;  
  7.             }  
  8.     } else {  
  9.         for (int index = 0; index < size; index++)  
  10.             if (o.equals(elementData[index])) {  
  11.                 fastRemove(index);  
  12.                 return true;  
  13.             }  
  14.     }  
  15.     return false;  
  16. }  
  17.   
  18. private void fastRemove(int index) {  
  19.     modCount++; // 特别注意q里Q这里只增加?jin)modCount的?nbsp; 
  20.     int numMoved = size - index - 1;  
  21.     if (numMoved > 0)  
  22.         System.arraycopy(elementData, index + 1, elementData, index,  
  23.                 numMoved);  
  24.     elementData[--size] = null; // Let gc do its work  

接着看。删除后得到下一个元素的代码Qit.next():  it为AbstractList的内部类Iterator的一个实例?br />
  1. public E next() {  
  2.     checkForComodification();  
  3.     try {  
  4.         E next = get(cursor);  
  5.         lastRet = cursor++;  
  6.         return next;  
  7.     } catch (IndexOutOfBoundsException e) {  
  8.         checkForComodification();  
  9.         throw new NoSuchElementException();  
  10.     }  
  11. }  
  12.   
  13. final void checkForComodification() {  //注意q个Ҏ(gu)
  14.     if (modCount != expectedModCount)  //(g)查这两个值是否相?/li>
  15.         throw new ConcurrentModificationException();  

最后看Iterator的remove()Ҏ(gu)的源代码Q?br />
  1. public void remove() {  
  2.     if (lastRet == -1)  
  3.         throw new IllegalStateException();  
  4.     checkForComodification();  
  5.     try {  
  6.         AbstractList.this.remove(lastRet);  
  7.         if (lastRet < cursor)  
  8.             cursor--;  
  9.         lastRet = -1;  
  10.         expectedModCount = modCount; // 讄expectedModCount  
  11.     } catch (IndexOutOfBoundsException e) {  
  12.         throw new ConcurrentModificationException();  
  13.     }  
  14. }  
  15.   
  16. final void checkForComodification() {  
  17.     if (modCount != expectedModCount)  
  18.         throw new ConcurrentModificationException();  

q下明白了(jin)Qlist的removeҎ(gu)只修改了(jin)modCount|而iterator的remove能同步modCount? expectedModCount.


Li Ya Qiang 2010-03-02 16:50 发表评论
]]>
URL中的ASCII标示W?/title><link>http://www.aygfsteel.com/wingwing/archive/2009/05/25/277784.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Mon, 25 May 2009 02:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/wingwing/archive/2009/05/25/277784.html</guid><wfw:comment>http://www.aygfsteel.com/wingwing/comments/277784.html</wfw:comment><comments>http://www.aygfsteel.com/wingwing/archive/2009/05/25/277784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wingwing/comments/commentRss/277784.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wingwing/services/trackbacks/277784.html</trackback:ping><description><![CDATA[Q{帖)(j)<br /> URL中的Ҏ(gu)字符      <br />   有些W号在URL中是不能直接传递的Q如果要在URL中传递这些特D符P那么p使用他们的编码了(jin)。编码的格式为:(x)%加字W的ASCII码,即一个百分号%Q后面跟对应字符的ASCIIQ?6q制Q码倹{例?nbsp;  I格的编码值是"%20"?nbsp;   <br />   下表中列Z(jin)一些URLҎ(gu)W号?qing)编?nbsp;   <br />        <br />      <br />                                                                         十六q制?nbsp;     <br />   1.   +         URL   ?可C空?nbsp;                                %2B      <br />   2.   I格   URL中的I格可以?h者编?nbsp;          %20      <br />   3.   /         分隔目录和子目录                                   %2F        <br />   4.   ?         分隔实际?nbsp;  URL   和参?nbsp;                        %3F        <br />   5.   %         指定Ҏ(gu)字符                                           %25        <br />   6.   #         表示书签                                                   %23        <br />   7.   &         URL   中指定的参数间的分隔W?nbsp;              %26        <br />   8.   =         URL   中指定参数的?nbsp;                              %3D      <img src ="http://www.aygfsteel.com/wingwing/aggbug/277784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wingwing/" target="_blank">Li Ya Qiang</a> 2009-05-25 10:19 <a href="http://www.aygfsteel.com/wingwing/archive/2009/05/25/277784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q{载)(j)RCP的一些细节部?/title><link>http://www.aygfsteel.com/wingwing/archive/2008/07/13/214551.html</link><dc:creator>Li Ya Qiang</dc:creator><author>Li Ya Qiang</author><pubDate>Sun, 13 Jul 2008 02:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/wingwing/archive/2008/07/13/214551.html</guid><wfw:comment>http://www.aygfsteel.com/wingwing/comments/214551.html</wfw:comment><comments>http://www.aygfsteel.com/wingwing/archive/2008/07/13/214551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wingwing/comments/commentRss/214551.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wingwing/services/trackbacks/214551.html</trackback:ping><description><![CDATA[来自http://cary.javaeye.com/blog/32419<br /> <br /> <span id="wmqeeuq" class="hilite1">ECLIPSE</span> PLUG-IN RCP <br /> 此部分有的是自己的开发中的经验,有的是在论坛中看到别人的l验。我在这里把部分觉得好的部分攉Q整理。希望对大家有帮助? <br /> 1Q登陆对话框 <br /> public Object run(Object args) throws Exception { <br /> Display display = PlatformUI.createDisplay(); <br /> <br /> try { <br /> Platform.endSplash(); <br /> /** <br /> * d <br /> */ <br /> if (!login()) <br /> return IPlatformRunnable.EXIT_OK; <br /> <br /> logger.info("正在初始化客L(fng)......"); <br /> // <br /> InitUIProgress.addInfor("初始化主界面..."); <br /> int returnCode = PlatformUI.createAndRunWorkbench(display, <br /> new ApplicationWorkbenchAdvisor()); <br /> if (returnCode == PlatformUI.RETURN_RESTART) { <br /> return IPlatformRunnable.EXIT_RESTART; <br /> } <br /> <br /> return IPlatformRunnable.EXIT_OK; <br /> } finally { <br /> display.dispose(); <br /> } <br /> } <br /> <br /> <br /> <br /> 2Q该写actionBar ?ActionFactory.OPEN_PERSPECTIVE_DIALOG.create(window) <br /> <br /> IActionBarConfigurer configurer = getActionBarConfigurer(); <br /> final IWorkbenchWindow window = configurer.getWindowConfigurer().getWindow(); <br /> <br /> MenuManager perspectiveMenu = new MenuManager("Open Perspective"); <br /> IContributionItem perspectiveList = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window); <br /> perspectiveMenu.add(perspectiveList); <br /> windowMenu.add(perspectiveMenu); <br /> <br /> 3Q让其viewpart昄线? <br /> ?WorkbenchWindowAdvisor 中的preWindowOpenQ)(j)中设|? <br /> //昄Ҏ(gu) <br /> PlatformUI.getPreferenceStore().setDefault( <br /> IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, true); <br /> //不显CZl的H口 <br /> PlatformUI.getPreferenceStore().setDefault( <br /> IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, <br /> false); <br /> <br /> <br /> 4:可以使用action来做, 调用下面的方? <br /> <br /> IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window) <br /> or <br /> IWorkbench.showPerspective(String perspectiveId, IWorkbenchWindow window, IAdaptable input) <br /> <br /> IWorkbench和IWorkbenchWindow对象都可以在ViewPart中找? <br /> <br /> 5:定义热键 <br /> getShell().getDisplay().addFilter(SWT.KeyDown, globEvent); <br /> <br /> plugin.xml里面hotkey <br /> <extension <br /> point="org.<span id="wmqeeuq" class="hilite1">eclipse</span>.ui.bindings"> <br /> <!--key <br /> commandId="org.<span id="wmqeeuq" class="hilite1">eclipse</span>.ui.file.exit" <br /> schemeId="org.<span id="wmqeeuq" class="hilite1">eclipse</span>.ui.defaultAcceleratorConfiguration" <br /> sequence="CTRL+X"> <br /> </key --> <br /> </extension> <br /> <br /> 6.如何或得RCP中的一些\径问? <br /> 从插件中获得l对路径Q? <br /> AaaaPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath()); <br /> <br /> <br /> 通过文g得到ProjectQ? <br /> <br /> IProject project = ((IFile)o).getProject(); <br /> <br /> <br /> 通过文g得到全\径:(x) <br /> <br /> String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath(); <br /> <br /> <br /> <br /> 得到整个Workspace的根Q? <br /> <br /> IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); <br /> <br /> <br /> 从根来查找资源:(x) <br /> <br /> IResource resource = root.findMember(new Path(containerName)); <br /> <br /> 从Bundle来查找资源:(x) <br /> <br /> Bundle bundle = Platform.getBundle(pluginId); <br /> URL fullPathString = BundleUtility.find(bundle, filePath); //BundleUtilitycdui里,非UI的没法用 <br /> <br /> q有其它Ҏ(gu)QURL fileURL = FileLocator.find(bundle, new Path("some file relative path"), null); <br /> <br /> <br /> 得到Appliaction workspaceQ? <br /> <br /> Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath(); <br /> <br /> 得到runtimeworkspaceQ? <br /> Platform.getInstanceLocation().getURL().getPath(); <br /> <br /> 从编辑器来获得编辑文Ӟ(x) <br /> <br /> IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart(); <br /> IEditorInput input = editor.getEditorInput(); <br /> if(input instanceof IFileEditorInput){ <br /> IFile file = ((IFileEditorInput)input).getFile(); <br /> } <br /> <br /> 得到plugin.xml中的所以ACTION <br /> IContributionItem[] items = getViewSite().getActionBars().getMenuManager().getItems(); <br /> for (int i = 0; i < items.length; i++) { <br /> manager.add(items[i]); <br /> }<br /> <br /> <img src ="http://www.aygfsteel.com/wingwing/aggbug/214551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wingwing/" target="_blank">Li Ya Qiang</a> 2008-07-13 10:07 <a href="http://www.aygfsteel.com/wingwing/archive/2008/07/13/214551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在view里得到在workbechwindow里注册到menu的actionhttp://www.aygfsteel.com/wingwing/archive/2008/07/13/214547.htmlLi Ya QiangLi Ya QiangSun, 13 Jul 2008 01:55:00 GMThttp://www.aygfsteel.com/wingwing/archive/2008/07/13/214547.htmlhttp://www.aygfsteel.com/wingwing/comments/214547.htmlhttp://www.aygfsteel.com/wingwing/archive/2008/07/13/214547.html#Feedback0http://www.aygfsteel.com/wingwing/comments/commentRss/214547.htmlhttp://www.aygfsteel.com/wingwing/services/trackbacks/214547.html
       上周五在目中遇C个棘手的问题Q需要在自己定义的view中得到在workbechwindow里注册到menu的action。这个action不是通过扩展扩展点actionset定义的,是通过l承Action对象来定义的。经q一番思烦(ch)后,感觉有两条\可走Q?br />
     1.  让这个actionl承IPartListener接口Qƈ注册到那个view中,q样在view中可以通过getListenersҎ(gu)得到注册到这个view中的所有Listener列表Q再通过id扑ֈq个actionQƈ改变q个action的状态。但是在后来遇到一个问题,q个action׃是在perspective的ApplicatonActionBarAdvisor的方法中实例化的Q比view先初始化Q故在aciton中无法得到这个view的实例,因此无法把action注册到view中。不知道是不是我的理解有误,如果q条路可以走通,误人帮忙?br />
    2. 然后是在view中调用相应的Ҏ(gu)来取得这个action。刚开始时Q通过this.getSite().getWorkbenchWindow()Ҏ(gu)始终无法得到actionbarsQ只有强制类型{换到WorkbenchWindow才能得到actionbarsQ?/span>主要是通过以下代码Q?br />
WWinActionBars winBars =  ((WorkbenchWindow) this.getSite().
                        getWorkbenchWindow()).getActionBars();
IAction action 
= winBars .getGlobalActionHandler("actionID");
action.setEnable(
true);
      
       但是WWinActionBarscdƈ没有实现通过action的ID得到q个action对象?span style="color: #000000;">getGlobalActionHandlerҎ(gu)Q该method只返回nullQ因此此Ҏ(gu)也无法达成目标?br />
       在我无计可施的时候,只能惛_用最W的办法来实C(jin)Q就是在view中得到管理这个aciton的MenuManagerQƈ通过MenuManager来得到和action相关联的MenuItemQ最后改变MenuItem的状态来改变action。主要代码如下:(x)

      

        WWinActionBars winBars = ((WorkbenchWindow) this.getSite().
                                                  getWorkbenchWindow()).getActionBars();
        IContributionItem[] contributionItems 
= winBars .
                                                  getMenuManager().getItems();
        
for(int i = 0; i < contributionItems .length; i++) {
            
if (contributionItems[i] instanceof MenuManager) {
                MenuManager menuM
= (MenuManager)contributionItems [i];
                
if (menuM .getId().equals("menumanagerID")) {
                    MenuItem[] menuItems = menuM.getMenu().getItems();
                    
for (int j = 0; j < menuItems.length; j++) {
                        
if (menuItems [j].getText().equals("actionText")) {
                           
menuItems [j].setEnable(true);                   
                        }                            
                    }       

                }
            }
        }
   
      
       l过q次研究Q对SWT和JFace的menu理有了(jin)更深的理解,如果中间有什么问题,误Z指出来,大家一起学?fn),谢谢Q?br />


Li Ya Qiang 2008-07-13 09:55 发表评论
]]>
վ֩ģ壺 ɽ| ʲ| ̨| | Ϫ| ī| ũ| | ֹ| | | | ɽ| | | ܿ| ʳ| | | ɽʡ| | | | | ٷ| | пѷ| | | | ˮ| | | | Ҿ| | ˴| ˫| ĵ| | ƽ|