﻿<?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-steeven-随笔分类-程序点滴</title><link>http://www.blogjava.net/steeven/category/6472.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:16:17 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:16:17 GMT</pubDate><ttl>60</ttl><item><title>吹一吹偶的新作品：skype remote desktop</title><link>http://www.blogjava.net/steeven/archive/2006/12/06/85926.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Wed, 06 Dec 2006 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/12/06/85926.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/85926.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/12/06/85926.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/85926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/85926.html</trackback:ping><description><![CDATA[最近让新来的实习生写订餐机器人，羽毛球活动预定机器人，两个人写了几个星期，看得我心急火燎。现在的研究生啊。。。。<br /><br />自己拿来skype4java看了一下，感觉很好用。里面提供了一个application机制，类似socket，又强于socket。为什么说强呢？因为是基于skype, 穿透防火墙啦。<br />windows自带的远程桌面很好用，在速度上，比以前基于位图传送的netmeeting/pcanywhere之类的都要强。<br />linux下面的远程桌面做的比较好的是nx系列。但是这些远程桌面的致命问题就是网关、防火墙问题。<br />就是说你要在家访问公司电脑，基本上要在防火墙上凿洞，或者借助于vpn，softether之类的东东。<br /><br />skype的application利用skype自身的通讯机制，屏蔽了这些问题，当然，你的应用也必须依赖skype了。<br /><br />java做远程桌面要能截屏、控制鼠标键盘，所幸有java.awt.Robot, 原来这个东西是为了做自动化测试，刚好。<br />剩下就是穿数据的问题。屏幕图片，如果是bmp，比较硕大，即使是上网等文本界面，压缩下来也要几十k, 如果网络带宽不够的话，比如公司有几个下载爱好者，会比较惨。所以呢，决定传差异，缓存前面的屏幕，看看如果差别不大，就只传变化的部分。这样数据量就比较小。但是呢，压缩图片的时候就不能采用有损压缩啦，否则屏幕会变得越来越怪异。。。<br /><br />比较遗憾的是没能象windows自带的rdp那样拦截绘图操作，在点阵图的方案上效率还是比较低的。希望有高手指点！<br /><br />skype4java是个日本人写的，几个听了我介绍的朋友都有这疑问：日本人写的？<br />呵呵，如果你能写出更好的，咱就不用它。那个日本作者还不错，上班比较忙，还是答应抽空fix几个bug，感谢中~<br /><br />体验一下吧：<a title="skypeRDP" href="http://steeven.googlepages.com/skyperdp">skypeRDP</a><img src ="http://www.blogjava.net/steeven/aggbug/85926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-12-06 20:18 <a href="http://www.blogjava.net/steeven/archive/2006/12/06/85926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GWT开发中的几个问题</title><link>http://www.blogjava.net/steeven/archive/2006/07/14/58239.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 14 Jul 2006 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/07/14/58239.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/58239.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/07/14/58239.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/58239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/58239.html</trackback:ping><description><![CDATA[
		<p>适用版本GWT 1.0.21。<br />由于目前google web toolkit还没有正式release, 所以问题多多。记录一下碰到的问题：<br /><br />1. Shell调试模式和实际编译结果有差异。<br />shell中报告的异常在运行中只是一些凌乱的脚本错误，或者干脆没有响应。<br />shell中通过的程序在实际运行时还会有错误。<br />2. 避免错误的方法是捕获异常，<br />在onModuleLoad方法中try catch<br />或者GWT.setUnCaughtExceptionHandler()//全局异常捕获<br />3. LOG, 利用GWT.log(). shell模式下会输出到控制台。<br />4. 远程调用属于异步。同步远程调用可以自己包装ClientCallback，在一个结束后调用另外一个.<br />5. RPC调用中Set传递有bug, 暂时用List<br />6. Eclipse直接运行Compiler/Shell, 加入gwt-dev-windows.jar。<br />main: com.google.gwt.dev.GWTCompiler/GWTShell<br />arguments: -out ${project_loc}\WebContent real/Index.html<br />classpath-&gt;UserEnties-&gt;advanced-&gt;add folder-&gt;选择项目的src目录，要在第一位。<br />7. Tomcat5问题多多, 用tomcat4.<br />8. gwt-user中非法包含javax.servlet, tomcat认为其无效。直接放到tomcat/common/lib中。或者在jar中去掉。<br />9. Exception.getStackTrace() 在Shell模式下有效, GWT.isScript()可以判断<br />10. 静态中文在html中乱码，要在html header中加入&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br /></p>
<img src ="http://www.blogjava.net/steeven/aggbug/58239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-07-14 18:10 <a href="http://www.blogjava.net/steeven/archive/2006/07/14/58239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发过程中的鸡生蛋蛋生鸡的问题</title><link>http://www.blogjava.net/steeven/archive/2006/07/02/56191.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Sun, 02 Jul 2006 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/07/02/56191.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/56191.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/07/02/56191.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/56191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/56191.html</trackback:ping><description><![CDATA[开发设计两个类：<br />鸡，构造的时候要带入蛋．<br />蛋，构造的时候要带入鸡．<br /><br />编译没问题，初始化数据的时候问题出来了．<br />new 鸡(new 蛋(???))　//蛋是谁下的？<br />作为一个正统的进化论学生，解决如下：构造原始鸡类，鸡开始是不下蛋的，把鸡的构造函数改成空的，这时候初始化一条原始鸡的数据没问题．然后进化出来蛋，鸡下的，类不用改，把蛋的数据初始化好．这时候鸡进化，由蛋孵出来，构造方法要带蛋进来，初始化一只新鸡，删除原始鸡数据．<br /><br />OK，问题解决了吗？这样程序每次初始化数据的时候要改造鸡类，好像不大容易啊....<br /><br />那上帝造物学说怎样解决问题呢？：<br />鸡1 = new 鸡(null);<br />蛋1 = new 蛋(null);<br />鸡1.set蛋(蛋1);<br />蛋1.set鸡(鸡1);<br />save(鸡1,蛋1);<br />鸡和蛋同时出来了．上帝造物法胜利<img height="19" src="http://www.blogjava.net/Emoticons/emdgust.gif" width="19" border="0" /><br /><br />是不是我的类设计有问题，怎么会碰到鸡生蛋蛋孵鸡这种郁闷的问题呢？<img src ="http://www.blogjava.net/steeven/aggbug/56191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-07-02 20:28 <a href="http://www.blogjava.net/steeven/archive/2006/07/02/56191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监听Swing窗口的键盘鼠标事件</title><link>http://www.blogjava.net/steeven/archive/2006/06/13/52504.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Tue, 13 Jun 2006 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/06/13/52504.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/52504.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/06/13/52504.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/52504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/52504.html</trackback:ping><description><![CDATA[
		<p>一般Apply按钮应该在用户有输入时有效，输入没有变化时无效。<br />为了达到这个效果，一般界面上每个输入控件要监听，并且和以前的值做比较，实现起来相当麻烦。<br /><br />因为我们已有的界面是基于数据绑定，绑定到一个克隆的对象上。这样判断有没有变化就很简单，updateInput之后，比较两个对象是否一致即可。<br /><br />什么时候去判断呢？在用户输入之后：捕捉键盘、鼠标事件。<br /><br />拦截键盘鼠标事件目前找到两种方法：<br />1. Toolkit.getDefaultToolkit().addAWTEventListener(listener,eventMask);<br />这个方法注册全局的监听机制，无论哪个窗口。里面注册为weakHashmap，应该不用考虑垃圾回收问题。因为是全局的，不建议采用。<br />2. 拦截每个component自己的事件。<br />正常来说，如果在textbox里面打字，事件不会交给window处理。enableInputMethods(true)可以帮忙。<br />enable以后调用getInputContext()，取得InputContext处理。<br />注意，InputContext的dispatchEvent(AWTEvent)会接到各种消息，感兴趣的getID()有以下三个：<br />   MouseEvent.MOUSE_CLICKED<br />   MouseEvent.MOUSE_WHEEL<br />   KeyEvent.KEY_TYPED<br /></p>
<img src ="http://www.blogjava.net/steeven/aggbug/52504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-06-13 16:52 <a href="http://www.blogjava.net/steeven/archive/2006/06/13/52504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GWT做的guess number</title><link>http://www.blogjava.net/steeven/archive/2006/06/02/49941.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 02 Jun 2006 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/06/02/49941.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/49941.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/06/02/49941.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/49941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/49941.html</trackback:ping><description><![CDATA[gwt的这些特性还是很有意思的，感觉比echo更贴近html, 比如说尺寸等数据，写"20%"和"200px"都可以。echo则尽量封装的象swing, 屏蔽掉html.<br /><br />anyway, 对于大多数逻辑都在客户端的应用，gwt可以大展身手。比如小游戏～<br /><br />guess number demo看这里：<a href="http://steeven.googlepages.com/MyApp.html">http://steeven.googlepages.com/MyApp.html</a><br />完全在浏览器上运行的玩意，没有写一句js，感觉还是很爽的～<br /><br />代码如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> org.steeven.gwt.test.client;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.core.client.EntryPoint;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.Random;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.Button;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.ClickListener;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.DialogBox;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.Grid;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.HasHorizontalAlignment;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.RootPanel;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.TextBox;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.VerticalPanel;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.google.gwt.user.client.ui.Widget;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_567_602_Open_Image" onclick="this.style.display='none'; Codehighlighter1_567_602_Open_Text.style.display='none'; Codehighlighter1_567_602_Closed_Image.style.display='inline'; Codehighlighter1_567_602_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_567_602_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_567_602_Closed_Text.style.display='none'; Codehighlighter1_567_602_Open_Image.style.display='inline'; Codehighlighter1_567_602_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_567_602_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_567_602_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> steeven@gmail.com<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_645_3383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_645_3383_Open_Text.style.display='none'; Codehighlighter1_645_3383_Closed_Image.style.display='inline'; Codehighlighter1_645_3383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_645_3383_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_645_3383_Closed_Text.style.display='none'; Codehighlighter1_645_3383_Open_Image.style.display='inline'; Codehighlighter1_645_3383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MyApp </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> EntryPoint </span><span id="Codehighlighter1_645_3383_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_645_3383_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    TextBox txtCount </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TextBox();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Grid pnlMain;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Button[] numbers </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Button[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> target;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> count;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> DialogBox box;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Button btnRetry;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Button btnClose;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_877_920_Open_Image" onclick="this.style.display='none'; Codehighlighter1_877_920_Open_Text.style.display='none'; Codehighlighter1_877_920_Closed_Image.style.display='inline'; Codehighlighter1_877_920_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_877_920_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_877_920_Closed_Text.style.display='none'; Codehighlighter1_877_920_Open_Image.style.display='inline'; Codehighlighter1_877_920_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_877_920_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_877_920_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * This is the entry point method.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_950_2381_Open_Image" onclick="this.style.display='none'; Codehighlighter1_950_2381_Open_Text.style.display='none'; Codehighlighter1_950_2381_Closed_Image.style.display='inline'; Codehighlighter1_950_2381_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_950_2381_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_950_2381_Closed_Text.style.display='none'; Codehighlighter1_950_2381_Open_Image.style.display='inline'; Codehighlighter1_950_2381_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> onModuleLoad() </span><span id="Codehighlighter1_950_2381_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_950_2381_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        VerticalPanel pnlStatus </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> VerticalPanel();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlStatus.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlStatus.setSpacing(</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        txtCount.setEnabled(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        txtCount.setVisibleLength(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlStatus.add(txtCount);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnRetry </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Button();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnRetry.setHTML(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;img src=\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">replay.gif\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt; &lt;u&gt;R&lt;/u&gt;etry</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnRetry.setAccessKey(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_1362_1425_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1362_1425_Open_Text.style.display='none'; Codehighlighter1_1362_1425_Closed_Image.style.display='inline'; Codehighlighter1_1362_1425_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1362_1425_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1362_1425_Closed_Text.style.display='none'; Codehighlighter1_1362_1425_Open_Image.style.display='inline'; Codehighlighter1_1362_1425_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        btnRetry.addClickListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClickListener() </span><span id="Codehighlighter1_1362_1425_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1362_1425_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_1402_1421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1402_1421_Open_Text.style.display='none'; Codehighlighter1_1402_1421_Closed_Image.style.display='inline'; Codehighlighter1_1402_1421_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1402_1421_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1402_1421_Closed_Text.style.display='none'; Codehighlighter1_1402_1421_Open_Image.style.display='inline'; Codehighlighter1_1402_1421_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> onClick(Widget sender) </span><span id="Codehighlighter1_1402_1421_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1402_1421_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                doInit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlStatus.add(btnRetry);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Button btnAbout </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Button();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnAbout.setHTML(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;img src='about.gif'/&gt; &lt;u&gt;A&lt;/u&gt;bout</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnAbout.setAccessKey(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_1628_1692_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1628_1692_Open_Text.style.display='none'; Codehighlighter1_1628_1692_Closed_Image.style.display='inline'; Codehighlighter1_1628_1692_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1628_1692_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1628_1692_Closed_Text.style.display='none'; Codehighlighter1_1628_1692_Open_Image.style.display='inline'; Codehighlighter1_1628_1692_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        btnAbout.addClickListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClickListener() </span><span id="Codehighlighter1_1628_1692_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1628_1692_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_1668_1688_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1668_1688_Open_Text.style.display='none'; Codehighlighter1_1668_1688_Closed_Image.style.display='inline'; Codehighlighter1_1668_1688_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1668_1688_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1668_1688_Closed_Text.style.display='none'; Codehighlighter1_1668_1688_Open_Image.style.display='inline'; Codehighlighter1_1668_1688_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> onClick(Widget sender) </span><span id="Codehighlighter1_1668_1688_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1668_1688_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                doAbout();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlStatus.add(btnAbout);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        RootPanel.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">status</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).add(pnlStatus);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pnlMain </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Grid(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        RootPanel.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">main</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).add(pnlMain);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1868_2112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1868_2112_Open_Text.style.display='none'; Codehighlighter1_1868_2112_Closed_Image.style.display='inline'; Codehighlighter1_1868_2112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1868_2112_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1868_2112_Closed_Text.style.display='none'; Codehighlighter1_1868_2112_Open_Image.style.display='inline'; Codehighlighter1_1868_2112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_1868_2112_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1868_2112_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            numbers[i] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Button();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            numbers[i].setText(i </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_1982_2056_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1982_2056_Open_Text.style.display='none'; Codehighlighter1_1982_2056_Closed_Image.style.display='inline'; Codehighlighter1_1982_2056_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1982_2056_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1982_2056_Closed_Text.style.display='none'; Codehighlighter1_1982_2056_Open_Image.style.display='inline'; Codehighlighter1_1982_2056_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            numbers[i].addClickListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClickListener() </span><span id="Codehighlighter1_1982_2056_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1982_2056_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_2023_2051_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2023_2051_Open_Text.style.display='none'; Codehighlighter1_2023_2051_Closed_Image.style.display='inline'; Codehighlighter1_2023_2051_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2023_2051_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2023_2051_Closed_Text.style.display='none'; Codehighlighter1_2023_2051_Open_Image.style.display='inline'; Codehighlighter1_2023_2051_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> onClick(Widget sender) </span><span id="Codehighlighter1_2023_2051_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2023_2051_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    doGuess(sender);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            pnlMain.setWidget(i </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">, i </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">, numbers[i]);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> DialogBox();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box.setPopupPosition(</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_2234_2313_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2234_2313_Open_Text.style.display='none'; Codehighlighter1_2234_2313_Closed_Image.style.display='inline'; Codehighlighter1_2234_2313_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2234_2313_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2234_2313_Closed_Text.style.display='none'; Codehighlighter1_2234_2313_Open_Image.style.display='inline'; Codehighlighter1_2234_2313_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        btnClose </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;u&gt;C&lt;/u&gt;lose</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClickListener() </span><span id="Codehighlighter1_2234_2313_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2234_2313_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_2274_2309_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2274_2309_Open_Text.style.display='none'; Codehighlighter1_2274_2309_Closed_Image.style.display='inline'; Codehighlighter1_2274_2309_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2274_2309_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2274_2309_Closed_Text.style.display='none'; Codehighlighter1_2274_2309_Open_Image.style.display='inline'; Codehighlighter1_2274_2309_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> onClick(Widget sender) </span><span id="Codehighlighter1_2274_2309_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2274_2309_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                box.hide();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                doInit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnClose.setAccessKey(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box.add(btnClose);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        doInit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_2423_2969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2423_2969_Open_Text.style.display='none'; Codehighlighter1_2423_2969_Closed_Image.style.display='inline'; Codehighlighter1_2423_2969_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2423_2969_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2423_2969_Closed_Text.style.display='none'; Codehighlighter1_2423_2969_Open_Image.style.display='inline'; Codehighlighter1_2423_2969_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doGuess(Widget sender) </span><span id="Codehighlighter1_2423_2969_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2423_2969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Button btn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Button) sender;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnRetry.setEnabled(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Integer.parseInt(btn.getText());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        txtCount.setText(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">count));<br /><img id="Codehighlighter1_2584_2790_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2584_2790_Open_Text.style.display='none'; Codehighlighter1_2584_2790_Closed_Image.style.display='inline'; Codehighlighter1_2584_2790_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2584_2790_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2584_2790_Closed_Text.style.display='none'; Codehighlighter1_2584_2790_Open_Image.style.display='inline'; Codehighlighter1_2584_2790_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (n </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> target) </span><span id="Codehighlighter1_2584_2790_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2584_2790_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            numbers[n].setEnabled(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            btnClose.setFocus(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            box.clear();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            box<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    .setHTML(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;center&gt;&lt;img src='win.gif'/&gt;&lt;h1&gt;YOU WIN!!!&lt;/h1&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            box.add(btnClose);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            box.show();<br /><img id="Codehighlighter1_2797_2965_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2797_2965_Open_Text.style.display='none'; Codehighlighter1_2797_2965_Closed_Image.style.display='inline'; Codehighlighter1_2797_2965_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2797_2965_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2797_2965_Closed_Text.style.display='none'; Codehighlighter1_2797_2965_Open_Image.style.display='inline'; Codehighlighter1_2797_2965_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_2797_2965_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2797_2965_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (n </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> target)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000"> n; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    numbers[i].setEnabled(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> n; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    numbers[i].setEnabled(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_2998_3150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2998_3150_Open_Text.style.display='none'; Codehighlighter1_2998_3150_Closed_Image.style.display='inline'; Codehighlighter1_2998_3150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2998_3150_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2998_3150_Closed_Text.style.display='none'; Codehighlighter1_2998_3150_Open_Image.style.display='inline'; Codehighlighter1_2998_3150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doAbout() </span><span id="Codehighlighter1_2998_3150_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2998_3150_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box.clear();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                .setHTML(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;img src='about.gif'/&gt;&lt;h1&gt;Guess Number&lt;/h1&gt;&lt;h3&gt;Google web toolkit test&lt;/h3&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box.add(btnClose);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        box.show();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_3176_3380_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3176_3380_Open_Text.style.display='none'; Codehighlighter1_3176_3380_Closed_Image.style.display='inline'; Codehighlighter1_3176_3380_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_3176_3380_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3176_3380_Closed_Text.style.display='none'; Codehighlighter1_3176_3380_Open_Image.style.display='inline'; Codehighlighter1_3176_3380_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doInit() </span><span id="Codehighlighter1_3176_3380_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_3176_3380_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        btnRetry.setEnabled(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        target </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Random.nextInt(</span><span style="COLOR: #000000">99</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        count </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        txtCount.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_3309_3377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3309_3377_Open_Text.style.display='none'; Codehighlighter1_3309_3377_Closed_Image.style.display='inline'; Codehighlighter1_3309_3377_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_3309_3377_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3309_3377_Closed_Text.style.display='none'; Codehighlighter1_3309_3377_Open_Image.style.display='inline'; Codehighlighter1_3309_3377_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_3309_3377_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_3309_3377_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            numbers[i].setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            numbers[i].setEnabled(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />第一次玩gwt, 总共花了3个小时，菜呀<img src ="http://www.blogjava.net/steeven/aggbug/49941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-06-02 15:23 <a href="http://www.blogjava.net/steeven/archive/2006/06/02/49941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF之ResourceSet探索(4)</title><link>http://www.blogjava.net/steeven/archive/2006/05/26/48271.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 26 May 2006 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/26/48271.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/48271.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/26/48271.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/48271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/48271.html</trackback:ping><description><![CDATA[
		<p>测试一下getResource(URI,boolean):<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">        System.out.println(EcorePackage.eINSTANCE.eResource()); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">1</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">        System.out.println(XMLTypePackage.eINSTANCE.eResource()); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">2</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        ResourceSet rs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ResourceSetImpl();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                Resource.Factory.Registry.DEFAULT_EXTENSION,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> XMIResourceFactoryImpl());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        String uri </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">http://abc.eg/asdf</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">        System.out.println(rs.createResource(URI.createURI(uri))); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 如果创建过临时的，得到这个<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">        System.out.println(rs.createResource(URI.createURI(uri))); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 如果创建过多个临时的，返回第一个，这个忽略</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">        rs.getPackageRegistry().put(uri, EcorePackage.eINSTANCE); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">得到结果同1,如果上面取消注释，本地创建的优先</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(rs.getResource(URI.createURI(uri), </span>
				<span style="COLOR: #0000ff">false</span>
				<span style="COLOR: #000000">)); </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">同1<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>
				<br />createResource每次创建新的，getResource则是唯一实例的。</p>
		<p>每个生成的XxxPackage.eINSTANCE会自行创建自己的Resource。如果在插件中修改了EcorePackge.eInstance.eResource()，会不会天下大乱呢？</p>
		<p>==================<br />eclispe编辑器右边的Mark Occurrence很方便，但是家里电脑上的这个黄色小标记很不清楚。前几天调整了老半天，修改配色方案，换显示器驱动，调整显示器对比度、亮度都收效不大。昨天偶然把XP的桌面风格换回传统模式，搞定了。</p>
		<p>ecore.ecore这个问题很有意思，以前看过schema.xsd，就是自己定义自己。据说JDK也是用java开发编译出来的。。。<br />先有鸡还是现有蛋呢？</p>
<img src ="http://www.blogjava.net/steeven/aggbug/48271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-26 10:22 <a href="http://www.blogjava.net/steeven/archive/2006/05/26/48271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF之ResourceSet探索(3) </title><link>http://www.blogjava.net/steeven/archive/2006/05/26/48249.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 25 May 2006 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/26/48249.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/48249.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/26/48249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/48249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/48249.html</trackback:ping><description><![CDATA[
		<p>在RS中同一URI可以createResource多个Resource，List方式存放。还存在另外一种Map存放方式, getResource(URI,boolean loadOnDemand)就是通过这种方式存取，如果不存在的话创建。这两个方法看起来有些冲突。似乎用于不同场合。<br /><br />再来看看怎样通过URL存取EObject:<br />RS整个相当于一个DataBase, Resource相当于表，存放的是EObject, 每个EObject可以看成对象或者XML。<br />表用URI来区分，URI中的Segment用来定位EObject。URI的例子参见探索(1)<br />getEObject(URL, boolean loadOnDemand)很简单，getResource找到对应的Resource,在里面根据Segment查找，就是那个<a href="mailto:#///@xxx.n">#///@xxx.n</a>格式的东西，注意，还有ID方式。<br /><br />getPackageRegistry()用来返回RS的URL-&gt;Package注册表，它也是个本地的注册表，代理了全局的EPackage.Registry.INSTANCE。这个注册表用于取得EPackage（类型信息）和EFactory（创建实例）<br /><br /><br />Resource就不说了，主要load,save, 一些具体子类，比如XmlResourceImpl可以直接使用，指定Encoding之类。<br /><br />看看ResourceSet对EMF了解了很多~</p>
<img src ="http://www.blogjava.net/steeven/aggbug/48249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-26 01:23 <a href="http://www.blogjava.net/steeven/archive/2006/05/26/48249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF之ResourceSet探索(2) </title><link>http://www.blogjava.net/steeven/archive/2006/05/26/48242.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 25 May 2006 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/26/48242.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/48242.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/26/48242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/48242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/48242.html</trackback:ping><description><![CDATA[来看看ResourceSet.createResource(URI):Resource方法，从URI到Resource的过程如下：<br />1. getResourceFactoryRegistry()<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Resource.Factory.Registry getResourceFactoryRegistry()<br /><img id="Codehighlighter1_66_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_463_Open_Text.style.display='none'; Codehighlighter1_66_463_Closed_Image.style.display='inline'; Codehighlighter1_66_463_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_66_463_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_463_Closed_Text.style.display='none'; Codehighlighter1_66_463_Open_Image.style.display='inline'; Codehighlighter1_66_463_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span id="Codehighlighter1_66_463_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_66_463_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (resourceFactoryRegistry </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_113_423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_423_Open_Text.style.display='none'; Codehighlighter1_113_423_Closed_Image.style.display='inline'; Codehighlighter1_113_423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_113_423_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_423_Closed_Text.style.display='none'; Codehighlighter1_113_423_Open_Image.style.display='inline'; Codehighlighter1_113_423_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_113_423_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_113_423_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">可以自行Set一个注册表实现，没有的话用系统缺省注册表</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      resourceFactoryRegistry </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ResourceFactoryRegistryImpl()<br /><img id="Codehighlighter1_226_394_Open_Image" onclick="this.style.display='none'; Codehighlighter1_226_394_Open_Text.style.display='none'; Codehighlighter1_226_394_Closed_Image.style.display='inline'; Codehighlighter1_226_394_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_226_394_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_226_394_Closed_Text.style.display='none'; Codehighlighter1_226_394_Open_Image.style.display='inline'; Codehighlighter1_226_394_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_226_394_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_226_394_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Resource.Factory delegatedGetFactory(URI uri)<br /><img id="Codehighlighter1_301_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_384_Open_Text.style.display='none'; Codehighlighter1_301_384_Closed_Image.style.display='inline'; Codehighlighter1_301_384_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_301_384_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_301_384_Closed_Text.style.display='none'; Codehighlighter1_301_384_Open_Image.style.display='inline'; Codehighlighter1_301_384_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />          </span><span id="Codehighlighter1_301_384_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_301_384_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Resource.Factory.Registry.INSTANCE.getFactory(uri);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />          }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">代理系统注册表，注意这个应该是正宗的。</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> resourceFactoryRegistry;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>所以自己new 出来的ResourceSet可以向注册表中任意添加工厂实现。<br />2. 调用注册表的getFactory(URI), 实现如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Resource.Factory getFactory(URI uri)<br /><img id="Codehighlighter1_47_801_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_801_Open_Text.style.display='none'; Codehighlighter1_47_801_Closed_Image.style.display='inline'; Codehighlighter1_47_801_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_47_801_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_47_801_Closed_Text.style.display='none'; Codehighlighter1_47_801_Open_Image.style.display='inline'; Codehighlighter1_47_801_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span id="Codehighlighter1_47_801_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_47_801_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    String protocol </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> uri.scheme();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Object resourceFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">  protocolToFactoryMap.get(protocol); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先根据protocol查找</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (resourceFactory </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_204_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_204_580_Open_Text.style.display='none'; Codehighlighter1_204_580_Closed_Image.style.display='inline'; Codehighlighter1_204_580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_204_580_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_580_Closed_Text.style.display='none'; Codehighlighter1_204_580_Open_Image.style.display='inline'; Codehighlighter1_204_580_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_204_580_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_204_580_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      String extension </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> uri.fileExtension();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      resourceFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> extensionToFactoryMap.get(extension); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">找不到再根据扩展名查找</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (resourceFactory </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_369_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_369_574_Open_Text.style.display='none'; Codehighlighter1_369_574_Closed_Image.style.display='inline'; Codehighlighter1_369_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_369_574_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_369_574_Closed_Text.style.display='none'; Codehighlighter1_369_574_Open_Image.style.display='inline'; Codehighlighter1_369_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span><span id="Codehighlighter1_369_574_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_369_574_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        resourceFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> extensionToFactoryMap.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">尝试查找缺省扩展</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (resourceFactory </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_485_566_Open_Image" onclick="this.style.display='none'; Codehighlighter1_485_566_Open_Text.style.display='none'; Codehighlighter1_485_566_Closed_Image.style.display='inline'; Codehighlighter1_485_566_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_485_566_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_485_566_Closed_Text.style.display='none'; Codehighlighter1_485_566_Open_Image.style.display='inline'; Codehighlighter1_485_566_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_485_566_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_485_566_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          resourceFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> delegatedGetFactory(uri); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">自行实现可以扩展此方法解析。</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />      }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Descriptor可以用于编程使用</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      resourceFactory </span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000"> Resource.Factory.Descriptor </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ((Resource.Factory.Descriptor)resourceFactory).createFactory() :<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        (Resource.Factory)resourceFactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  }</span></span></div><br />查找一个工厂居然这么复杂！正因为这么复杂，才能支持platform/file/fttp等众多千奇百怪的URI<br />不同类型的工厂加工出不同类型的Resource, 才会输出为XSD/XML/XMI/....<br /><br />如果直接操作系统注册表要小心。EMF中定义了几个扩展点，可以实现类似目的。<br />已知的ResourceFactory实现有：XSD/ECore/EMOF/XML/XMI，XSD的输出方法的介绍可以参考Eclipse Development using the Graphical Editing Framework and the Eclipse Modeling Framework电子书。<br /><br /><br /><br /><img src ="http://www.blogjava.net/steeven/aggbug/48242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-26 00:02 <a href="http://www.blogjava.net/steeven/archive/2006/05/26/48242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF之ResourceSet探索(1)</title><link>http://www.blogjava.net/steeven/archive/2006/05/25/48229.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 25 May 2006 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/25/48229.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/48229.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/25/48229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/48229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/48229.html</trackback:ping><description><![CDATA[这个东西比较有趣，代码还要区分是否在Eclipse环境下运行。<br />先看看现象，以EMF例子Library.ecore为例, 测试代码如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_18_993_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_993_Open_Text.style.display='none'; Codehighlighter1_18_993_Closed_Image.style.display='inline'; Codehighlighter1_18_993_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_18_993_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_18_993_Closed_Text.style.display='none'; Codehighlighter1_18_993_Open_Image.style.display='inline'; Codehighlighter1_18_993_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test </span><span id="Codehighlighter1_18_993_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_18_993_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_79_991_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_991_Open_Text.style.display='none'; Codehighlighter1_79_991_Closed_Image.style.display='inline'; Codehighlighter1_79_991_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_79_991_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_991_Closed_Text.style.display='none'; Codehighlighter1_79_991_Open_Image.style.display='inline'; Codehighlighter1_79_991_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> IOException </span><span id="Codehighlighter1_79_991_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_79_991_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ResourceSet rs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ResourceSetImpl();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                Resource.Factory.Registry.DEFAULT_EXTENSION,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XMIResourceFactoryImpl()); //outside eclipse<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Resource resource </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rs.createResource(URI<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                .createURI(EXTLibraryPackage.eNS_URI));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">step a</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        Library library </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> EXTLibraryFactory.eINSTANCE.createLibrary();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        library.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">some lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        resource.getContents().add(library);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">step b<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        Book book = EXTLibraryFactory.eINSTANCE.createBook();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        book.setTitle("some book");<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        Employee employee = EXTLibraryFactory.eINSTANCE.createEmployee();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        employee.setFirstName("some one");<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">step c<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        library.getBooks().add(book);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        library.getEmployees().add(employee);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">step d<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        resource.getContents().add(book);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        System.out.println(EcoreUtil.getURI(employee));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        System.out.println(EcoreUtil.getURI(book));</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        resource.save(System.out, </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><table border="1"><tbody><tr><th>步骤 
</th><th>输出 
</th></tr><tr><td>a 
</td><td>----------------<br />&lt;?xml version="1.0" encoding="ASCII"?&gt;<br />&lt;extlib:Library xmi:version="2.0" xmlns:xmi="<a href="http://www.omg.org/XMI">http://www.omg.org/XMI</a>" xmlns:extlib="<a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0">http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0</a>" name="some lib"/&gt; 
</td></tr><tr><td>b <strong></strong></td><td><em>#//<br />#//<br /></em>&lt;?xml version="1.0" encoding="ASCII"?&gt;<br />&lt;extlib:Library xmi:version="2.0" xmlns:xmi="<a href="http://www.omg.org/XMI">http://www.omg.org/XMI</a>" xmlns:extlib="<a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0">http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0</a>" name="some lib"/&gt; 
</td></tr><tr><td>c 
</td><td><a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#//@employees.0"><em>http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#//@employees.0</em></a><br />#//<br />&lt;?xml version="1.0" encoding="ASCII"?&gt;<br />&lt;extlib:Library xmi:version="2.0" xmlns:xmi="<a href="http://www.omg.org/XMI">http://www.omg.org/XMI</a>" xmlns:extlib="<a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0">http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0</a>" name="some lib"&gt;<br />  <em>&lt;employees firstName="some one"/&gt;</em><br />&lt;/extlib:Library&gt;</td></tr><tr><td>d 
</td><td><a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#/0/@employees.0">http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#/0/@employees.0</a><br /><a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#/1"><em>http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0#/1</em></a><br />&lt;?xml version="1.0" encoding="ASCII"?&gt;<br /><em>&lt;xmi:XMI xmi:version="2.0" xmlns:xmi="</em><a href="http://www.omg.org/XMI"><em>http://www.omg.org/XMI</em></a><em>" xmlns:extlib="</em><a href="http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0"><em>http:///org/eclipse/emf/examples/library/extlibrary.ecore/1.0.0</em></a><em>"&gt;<br /></em>  &lt;extlib:Library name="some lib"&gt;<br />    &lt;employees firstName="some one"/&gt;<br />  &lt;/extlib:Library&gt;<br />  <em>&lt;extlib:Book title="some book"/&gt;<br /></em>&lt;/xmi:XMI&gt;</td></tr></tbody></table><br />可以看到，没有加入lib的时候，employee/book实例的URI都是#//, employee加入以后有了<a href="mailto:#//@employees.0">#//@employees.0</a>, book依旧。<br />在book加入resource以后有了#/1的URI, employee/book在containment定义分别是true,false，所以employee加入lib以后就随lib加入resource（实例容器）。book则要单独加入。<br /><br />另外一个有趣的现象是Resource可以容纳多个实例，在step d可以看到输出的根节点由lib变成匿名容器。<br /><br />如果lib不加入resource又如何呢？<br /><table border="1"><tbody><tr><th>步骤 
</th><th>输出 
</th></tr><tr><td>a 
</td><td>----------------
</td></tr><tr><td>b <strong></strong></td><td><em>#//<br />#//</em></td></tr><tr><td>c 
</td><td><a href="mailto:#///@employees.0">#///@employees.0</a><br />#//</td></tr><tr><td>d 
</td><td>----------------</td></tr></tbody></table>没加入resource之前，URI是未知的，知道的只是相对父节点的相对segment.<br /><br /><img src ="http://www.blogjava.net/steeven/aggbug/48229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-25 22:40 <a href="http://www.blogjava.net/steeven/archive/2006/05/25/48229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Annotation Wizard for EMF插件</title><link>http://www.blogjava.net/steeven/archive/2006/05/24/47883.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Wed, 24 May 2006 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/24/47883.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/47883.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/24/47883.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/47883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/47883.html</trackback:ping><description><![CDATA[Eclipse的Ecore编辑工具里面Annotation完全要手写，比如写ExtendedMetaData就很费劲。<br />手写指定Source，指定每个Key/Value很容易出错。<br />这个插件通过向导选择source, 通过PropertySheet编写Key/Value。并且根据Ecore的定义实现校验。<br /><br />Step1:<br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11477/o_annotation_wizard_0.JPG" /><br /><br />Step 2:<br />AllDataTypes组合了该URL下面所有的EDataType<br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11477/o_annotation_wizard_1.JPG" /><br /><br />Step3: 编辑属性。注意source的变化：<br />如果选择的AllDataTypes，就是Ecore的URI<br />如果选择某个EClass, 后面会加上#<em>EClassName<br /></em><img src="http://www.blogjava.net/images/blogjava_net/steeven/11477/o_annotation_wizard_2.JPG" /><br /><br />Step4: 如果选择AllDataTypes，自动选择所有EdataTypes。<br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11477/o_annotation_wizard_3.JPG" /><br /><br />Step5: 工作结果<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11477/o_annotation_wizard_4.JPG" /><br /><br />请注意Source的生成规则！<br /><br />适用版本：eclipse3.2rc3<br />下载地址: <a href="/Files/steeven/org.steeven.eclipse.emf.annotation.wizard.zip">http://www.blogjava.net/Files/steeven/org.steeven.eclipse.emf.annotation.wizard.zip</a>　（含源码）<img src ="http://www.blogjava.net/steeven/aggbug/47883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-24 20:14 <a href="http://www.blogjava.net/steeven/archive/2006/05/24/47883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF验证扩展：自定义验证规则</title><link>http://www.blogjava.net/steeven/archive/2006/05/19/47107.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 19 May 2006 11:03:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/05/19/47107.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/47107.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/05/19/47107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/47107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/47107.html</trackback:ping><description><![CDATA[EMF验证方面的文档很少, 日他娘的微软拼音，真讨厌啊。<br />因为比较少，所以这里总结一下。<br /><br />验证的定义有两种方式：<br />1. 生成验证方法框架，代码自己实现。参见<a href="http://dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/org.eclipse.emf/doc/org.eclipse.emf.doc/references/overview/EMF.Validation.html">EMF Overview</a>:<br />  添加Annotatio, Source=http://www.eclipse.org/emf/2002/Ecore, 然后添加DetailsEntry：key=constraints, Value=validateXxx<br />  EDataType,EClass支持，属性不支持。<br />2. 定义类似Schema的Facet，自动生成对应的验证代码，用于验证简单数据类型： <br />  添加Annotatio, Source=http:///org/eclipse/emf/ecore/util/ExtendedMetaData, 然后添加DetailsEntry：key=maxLength, Value=2<br />  支持的facet参见ExtendedMetaData。<br />  仅EDataType支持，属性不支持。<br /><br />示例Ecore:<br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11114/o_emf_validate.JPG" /><br />新生成SqlmodelValidator.java, 代码如下：<br /><img src="http://www.blogjava.net/images/blogjava_net/steeven/11114/o_SqlmodelValidator.JPG" /><br />可见Table_ValidateC, MyLabel_ValidateA,MyLabel_validateB都自动生成，修改里面的if(false)为需要的业务判断逻辑。<br />validateMyLabel_MaxLength()方法是根据ExtendedMetaData自动生成的，无需修改。<br /><br />总结：<br />1. EMF验证利用了Annotation扩展，这种机制很灵活，但是给用户带来不便。<br />2. Attribute属性不能生成验证规则（eclipse3.2rc3），可以定义为单独的EDataType，然后引用之。<br />3. Constraints+Facet+本身的结构验证可以构成很强的验证规则，并且属于Model层，数据本身即可验证自身。<br />4. EObjectValidator.DynamicEDataTypeValidator似乎可用于动态验证，有知道用法的朋友给讲解一下~<br /><br /><img src ="http://www.blogjava.net/steeven/aggbug/47107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-05-19 19:03 <a href="http://www.blogjava.net/steeven/archive/2006/05/19/47107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Manifest编辑插件 for eclipse3.1/jdk1.5</title><link>http://www.blogjava.net/steeven/archive/2006/04/07/39863.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 07 Apr 2006 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/04/07/39863.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/39863.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/04/07/39863.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/39863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/39863.html</trackback:ping><description><![CDATA[最近照葫芦画瓢，写了一个manifest的可视化编辑和自动更新工具。<br /><br />主要想法是运行程序一句话搞定： java -jar xxx.jar。所有class path在jar里面的manfiest.mf中设定。<br />当需要引用的jar很多的时候，windows2000有命令行的长度限制，会报错。<br /><br />主要功能：<br />1. new wizard<br />2. gui editor<br />3. switch auto-update in project menu<br /><br />Class-Path in auto-updated manifest.mf file will be auto updated<br />while increase &amp; full building.<br /><br />下载：<a href="/Files/steeven/org.steeven.eclipse.manifest_1.0.zip">http://www.blogjava.net/Files/steeven/org.steeven.eclipse.manifest_1.0.zip</a><br /><br />安装：eclipse菜单[help]-&gt; Software Updates-&gt; Find and Install -&gt;    Search for new features to install -&gt;   new archieved site <img src ="http://www.blogjava.net/steeven/aggbug/39863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-04-07 16:24 <a href="http://www.blogjava.net/steeven/archive/2006/04/07/39863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>总结一下最近碰到的几个怪问题</title><link>http://www.blogjava.net/steeven/archive/2006/04/07/39860.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Fri, 07 Apr 2006 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/04/07/39860.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/39860.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/04/07/39860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/39860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/39860.html</trackback:ping><description><![CDATA[
		<p>最近碰到几个怪问题：<br />1. 在新装的XP上Swing界面文字不显示，加上远程调试参数就能出来。安装最新的jre/jdk也没用。启动时加上远程调试参数OK，但不能这样交付啊。后来给显卡升级了一下驱动，搞定！真是奇怪<br />2. xp上跑的很好的批处理在win2k下失败，%~dps0失败，这是用来取批处理的短格式当前路径。google后知道这个参数在xpsp2以前都返回错误路径，我倒。。。 %~dps1, %~dp0都能正常工作，于是乎，写了两个批处理，把%dp0(长路径)传给另外一个，在那里面用%~dps1取得后设定环境变量，成功~<br />3. Java程序安装成服务以后不能接受其他电脑的访问，独立运行的时候没问题。用超级用户权限也没戏。后来拍拍脑袋发现是防火墙的问题，手动启动服务的时候windows防火墙不提示是否允许访问网络，所以缺省就被禁止鸟~。在防火墙中添加例外程序以后OK。所以安装程序需要聪明一些，自己在注册表中增加相关设定。<br /></p>
<img src ="http://www.blogjava.net/steeven/aggbug/39860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-04-07 16:15 <a href="http://www.blogjava.net/steeven/archive/2006/04/07/39860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可恶的mainfest.mf解析</title><link>http://www.blogjava.net/steeven/archive/2006/03/09/34527.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 09 Mar 2006 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/03/09/34527.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/34527.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/03/09/34527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/34527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/34527.html</trackback:ping><description><![CDATA[最近碰到一个问题：一个Java应用中（非web）众多的jar在windows2000下面下载启动失败。仔细查看了一下，批处理bat自动把所有的jar都加入到环境变量中，由于jar太多，导致命令行过长，系统不错，“不能加入”。

查文档得知jar/META-INF下面的mainifet.mf可以指令jar需要引用的包，比如：
Class-Path: a.jar b/c.jar
实测发现加上两三个可以正常工作，多了以后就实效。换行，前面加一个空格还是不行。试验N久，放弃。
Class-Path: a.jar
 b.jar
 c.jar


多亏了偶一个同事契而不舍，终于发现java在解析的时候仅仅把上行末尾的回车和下行开头的空格去掉。所以，上面的格式中如果a.jar和b.jar后面直接跟回车，系统会认为是j.jar.b.jar.c.jar。 解决方法就是在每行后面加个空格。够弱智吧？

这个文件有每行76字符限制，不能超长。这些规定真是奇怪，居然能遗传到java5里面，希望野马能改正。<img src ="http://www.blogjava.net/steeven/aggbug/34527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-03-09 18:43 <a href="http://www.blogjava.net/steeven/archive/2006/03/09/34527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java版2006新春祝福</title><link>http://www.blogjava.net/steeven/archive/2006/01/12/27697.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 12 Jan 2006 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/01/12/27697.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/27697.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/01/12/27697.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/27697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/27697.html</trackback:ping><description><![CDATA[<P>偶msn名字是：Year y2006 = /*happy*/ new Year(2006);<BR>一个朋友受到启发，给偶写了一段祝福代码，稍微改编一下送给大家</P>
<P></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"><IMG id=Codehighlighter1_70_162_Open_Image onclick="this.style.display='none'; Codehighlighter1_70_162_Open_Text.style.display='none'; Codehighlighter1_70_162_Closed_Image.style.display='inline'; Codehighlighter1_70_162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_70_162_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_162_Closed_Text.style.display='none'; Codehighlighter1_70_162_Open_Image.style.display='inline'; Codehighlighter1_70_162_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(Blogger&nbsp;blogger&nbsp;:&nbsp;&nbsp;BlogFarm.getInstance[</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">BlogJava</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">].getBloggers())</SPAN><SPAN id=Codehighlighter1_70_162_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_70_162_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;blogger.setHealth(</SPAN><SPAN style="COLOR: #000000">Health.good);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;blogger.getFamily().setHappy(blogger.getFamily().getHappy()&nbsp;</SPAN><SPAN style="COLOR: #000000">+&nbsp;</SPAN><SPAN style="COLOR: #000000">1)</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;blogger.setMoney(blogger.getMoney&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">10)</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P>备注：<BR>1.未单元测试<BR>2. 感觉不如<A href="http://www.cnblogs.com/steeven/archive/2006/01/12/315847.html">c#版新春祝福</A>优雅一些<BR></P><img src ="http://www.blogjava.net/steeven/aggbug/27697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-01-12 11:33 <a href="http://www.blogjava.net/steeven/archive/2006/01/12/27697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>没事不要随便吃螃蟹</title><link>http://www.blogjava.net/steeven/archive/2006/01/05/26767.html</link><dc:creator>steeven</dc:creator><author>steeven</author><pubDate>Thu, 05 Jan 2006 11:08:00 GMT</pubDate><guid>http://www.blogjava.net/steeven/archive/2006/01/05/26767.html</guid><wfw:comment>http://www.blogjava.net/steeven/comments/26767.html</wfw:comment><comments>http://www.blogjava.net/steeven/archive/2006/01/05/26767.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/steeven/comments/commentRss/26767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/steeven/services/trackbacks/26767.html</trackback:ping><description><![CDATA[<P>最近程序除了点小问题，在多次执行某些操作之后屏幕会没有反应，服务器上很多执行的线程也中止。<BR>这是个很严重的问题，只要执行的任务一多，或者服务器开启事件过长，都会有这个现象。<BR>我们自己写的服务器，支持服务器命令行指令。在服务器不响应时，命令行可以动作，但是exit命令执行时会挂起<BR><BR>分析过程：<BR>1. debug模式启动，找到command line线程，手工中断，发现停留在Object.wait()方法上。<BR>2. 向下看线程堆栈，是apache/common/pool/GenericObjectPool调用，向下是hibernate的ConnectionManager<BR>3. 查看对象池的源码，是因为池子满了，因此等待借出对象return. 说明连接打开后没有释放。<BR>4. 因为我们代码中都是调用spring/hibernate的template或者自动事务，不存在手工打开连接，所以怀疑是哪个工具包出了问题。<BR>5. 首先发现dbcp/pool都不是最新的，换上后无效。 hibernate3.1已经最新了。<BR>6. 复制GenericObjectPool，在borrow和return方法中增加log, 打开connection Manager的log, 排除了所以配对的log外，有非connectionManager打开的连接，没有被归还。<BR>7. debug发现是自动事务结束后，连接池中_numActive没有变化，连接没有关闭，怀疑spring问题，spring1.2.1是正式发行版本。在其网站上发现最新版本是1.2.6，看看新版本的更新说明，搜索到hibernate的修正，有一个正好就是说：修正了针对hibernate3.1的事务管理。<BR>8. 更换为spring 1.2.6后正常，同时在dbcp中加大缺省maxActive数量。缺省为8个。<BR><BR>分析，因为hibernate3.1改变了事务处理方式，老版spring出现连接池泄漏。因为以前一直用的3.1的m版，所以看到正式版出来就直接更新了，没想到有些比较重大的改变。记得当初更新时hibernate annotation当时就不能用，过了几天才出来对应的更新版。<BR><BR>结论：单独的api都是没有问题的，配合起来很可能出问题。因此升级时应该谨慎，采用稳定版本，避免出现不匹配问题~~<BR><BR>浪费一个下午的时间~</P><img src ="http://www.blogjava.net/steeven/aggbug/26767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steeven/" target="_blank">steeven</a> 2006-01-05 19:08 <a href="http://www.blogjava.net/steeven/archive/2006/01/05/26767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>