??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲第一福利视频,91网站在线免费观看,九色综合日本http://www.aygfsteel.com/hxlistiancai/zh-cnTue, 24 Jun 2025 23:26:12 GMTTue, 24 Jun 2025 23:26:12 GMT60linux下用w3m上网的步?/title><link>http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html</link><dc:creator>Soap MacTavish</dc:creator><author>Soap MacTavish</author><pubDate>Fri, 23 Sep 2011 09:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html</guid><wfw:comment>http://www.aygfsteel.com/hxlistiancai/comments/359364.html</wfw:comment><comments>http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hxlistiancai/comments/commentRss/359364.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hxlistiancai/services/trackbacks/359364.html</trackback:ping><description><![CDATA[<div>使用w3m上网ҎQ?br />   <br />   W一步,需要安装一个名为w3m的Y件工P打开l端Q输入如下命?br /><br />  sudo apt-get install w3m w3m-img -y<br /><br />  W二步,安装好w3m之后Q在l端里面启动w3mQ打开一个网址Q比如w3m www.baidu.com 。现在是不是看到了只有在览器下面才能看到的癑ֺ首页呢?<br /><br />  如果您的l端不显CZ文请。安装zhcon。安装命令:<br /><br />  sudo apt-get install zhcon -y<br /><br />  好了Q下面给出w3m的相兛_助文件?br /><br />  与vim常用命ovim常用命o集相|h,j,k,l 可以分别用来做移动键,分别是左Q下Q上Q右。如果你熟习vim操作的话q会是很方便的功能?< ?> 用来左右滚屏?br /><br />  按q׃提示你退出!<br /><br />  在需要输入的文本框内按回车,下面׃出现TEXT: Q这时你可以输入你要搜烦的文字。再按回车就是返回给文本框。这时再把光标移?#8221;癑ֺ搜烦”的那个按键,回RQ就可以开始搜索了Q?br /><br />  使用 U 来重新输入需要打开的网址?br /><br />  B q回前一个页面?br /><br />  多标{操作!<br /><br />  可以使用 T 按键来打开一个新标签?br /><br />  在多个标{ֆ切换呢? 使用 { ?}可以了Q?br /><br />  使用 ESC-t 的话会打开标签的菜单让你选择Q功能类似系l中的alt-tab功能?br /><br />  C-q用于关于当前标签c?br /><br />  书签<br /><br />  C-a d书签<br /><br />  C-b 查看书签<br /><br />  查找<br /><br />  / 向后查找当前面<br /><br />  ? 向前查找当前面<br /><br />  n 查找下一个已查找q的关键?br /><br />  N 向前查找已查找过的关键字<br /><br />  帮助<br /><br />  H 以上的选项在这里都可以看到Q?/div><img src ="http://www.aygfsteel.com/hxlistiancai/aggbug/359364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hxlistiancai/" target="_blank">Soap MacTavish</a> 2011-09-23 17:00 <a href="http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT-多线E?http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.htmlSoap MacTavishSoap MacTavishSun, 17 Apr 2011 13:58:00 GMThttp://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.htmlhttp://www.aygfsteel.com/hxlistiancai/comments/348455.htmlhttp://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.html#Feedback0http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348455.htmlhttp://www.aygfsteel.com/hxlistiancai/services/trackbacks/348455.html 

本地事g调度

        对于M的GUI应用E序Q不所使用的是哪一U编E语a和UI工具包,背后的运行机刉是操作系l探GUI事gq把它们攑ֈ应用E序的事仉列中厅R这U机制在不同的操作系l^C大同异。当用户点击鼠标、键入字W、或者ɽH口获得焦点Q操作系l就会生成应用程序的GUI事gQ例如鼠标点凅R键盘输入、或H口重绘事g。操作系l决定哪一个窗口和应用E序应该接收用户触发的每一个事件ƈ把它攑օ应用E序的事仉列中?/p>

 

        MZH口的GUI应用E序的底层实现结构都是一个事件@?event loop)Q应用程序初始化q运行一个@?loop)Q用于从事g队列中读取GUI事gQƈ作出相应的反应。处理事件的工作必须q速完成,以保证GUI应用E序能够对用户作出快速反应?/p>

 

        UI事g触发的耗时较长的操作应该在一个单独的U程中执行,q样才能让事件@环主U程能够快速返回,获取应用E序事g队列中的下一个事件。但是,在非UIU程中访问图形界面部件和q_API 必须通过锁和串行化的机制(locking and serialization)来实现。违反这个规则的应用E序会引Ll调用失败,更严重的是锁住整个GUIpȝQGUI失去反应?/p>

 

SWT UI U程

        SWT 遵@pȝq_所直接支持的这U线E模型,应用E序在它的主U程中运行事件@?event loop)Qƈ在主U程中直接调度线E。UIU程是Display 对象被创建的U程Q所有其他的囑Ş部g都必dq个UIU程中创建?/p>

        既然所有的处理事g的代码是在应用程序的UIU程中触发的Q那么处理事件的E序代码p够不需要Q何特D方法自p问和调用囑Ş部g。不q,在处理长耗时的事件操作时Q需要用多U程来实现应用程序的功能?/p>

 

注:在非UIU程中调用Q何必dUIU程调用的程序,SWT会触发一?SWTException 异常?/p>

 

SWT 应用E序的主U程Q包括事件@环,其代码结构如下:

Java代码 复制代码 收藏代码
  1. public static void main (String [] args) {   
  2.    Display display = new Display ();   
  3.    Shell shell = new Shell (display);   
  4.    shell.open ();   
  5.    // start the event loop. We stop when the user has done   
  6.    // something to dispose our window.   
  7.    while (!shell.isDisposed ()) {   
  8.       if (!display.readAndDispatch ())   
  9.          display.sleep ();   
  10.    }   
  11.    display.dispose ();   
  12. }  

        创徏囑Ş部g和打开shell H口之后Q程序读取和分发来自操作pȝ事g队列的事Ӟ直到shell H口被销毁。如果在队列中不存在有效事gQdisplay q入睡眠状态,把运行机会交l其他程序?/p>

 

        SWT 提供了在后台ȝE中调用囑Ş部g代码的访问方法?/p>

 

q行非UIU程

         在非UI U程中不能直接调用UI 代码Q必L供一?Runnable对象Q在Runable中调用UI代码?a target="_blank">Display cM?span style="font-family: Arial, Helvetica, sans-serif; font-size: 13px">syncExec(Runnable) ?nbsp;asyncExec(Runnable) Ҏ用于在事件@环运行期?/span>Q在UI U程中运行这些Runnable对象?/span>

  • syncExec(Runnable)  当非UI U程中的E序代码依赖于UI 代码的返回|或者ؓ了确保在q回CU程之前Runnable 必须执行完成Ӟ应该使用q个Ҏ。SWT 会d调用U程Q直到在应用E序的UI U程中运行的q个Runnableq行l束为止。例如,一个后台线E需要基于一个窗口的当前寸q行某种计算Q就会需要同步地q行获取H口寸的代码,然后l箋其后面的计算?/span>
  • asyncExec(Runnable)  当程序需要执行一些UI 操作Q但在l执行之前不依赖q些操作必须完成的时候,应该使用q个Ҏ。例如,后台ȝE更新进度条Q或者重l一个窗口,它可以异步地发出更新或重l的hQƈ接着l箋后面的处理,在这U情况下Q后CU线E的q行旉和Runnable的运行没有必然的关系?/span>
下面的代码片D|CZ使用q两个方法的方式Q?/span>
Java代码 复制代码 收藏代码
  1. // do time-intensive computations   
  2. ...   
  3. // now update the UI. We don't depend on the result,   
  4. // so use async.   
  5. display.asyncExec (new Runnable () {   
  6.    public void run () {   
  7.       if (!myWindow.isDisposed())   
  8.          myWindow.redraw ();   
  9.    }   
  10. });   
  11. // now do more computations   
  12. ...  
        在用asyncExec 的时候,在runnable 中检查图形部件是否被销毁是一个好的习惯做法,在调用asyncExec和Runnable执行期间ȝE中有可能会发生其他的事情,不能保证runnable执行时图形部件当前处于什么状态?/div>

工作?Workbench)和多U程

        实现SWT应用E序的多U程规则非常明确Q你可以控制事g循环的初始化Q在应用E序中用多U程解决复杂问题?/p>

 

        向工作台d插g时的工作机制要父子一些,下面是用^?workbench platform)UI cȝ一?#8220;规约”(Rules of engagement)Q随着eclipse 的不断发布,可能会出C些例外:

  • 通常QQ何添加到q_中的工作?workbench) UI 扩展都是在工作台的UI ȝE中执行的,除非是明地把它们添加线E中或者是后台作业(background job)中,例如后台作业q度条?
  • 如果从工作台接收C个事Ӟ不能保证它是在UIU程中执行的Q查阅定义了监听器或事g的类的java文档Q如果没有特别说明用线E,q个cd是一个UI 相关c,可以在工作台ȝE中获得和运行?
  • 同样Q除非是文档明确说明Q^台UI库不能视作是U程安全的。请注意Q大部分q_UIcL在触发事件的调用U程中运行监听器的,q_和JFace API调用q不查是在UI U程中执行的Q这意味着如果在非UI U程中调用一个能够触发事件的ҎQ可能会引入问题。从非UI U程中调用SWT的APIQSWT会抛?SWTException 异常。通常Q除非文档中明确规定Q避免在别的U程中调用^台UI 代码?
  • 如果你的插g使用多线E或工作C?workbench job)Q必M?Display cȝasyncExec(Runnable) ?nbsp;syncExec(Runnable) ҎQ类调用M的工作台(workbench)、JFace或SWT 的应用程序接?API)Q除非是API明确说明是可以直接调用的?/span>
  • 如果在插件中使用 JFace?a target="_blank">IRunnableContext 接口 调用q度监视?progress monitor)Q以q行一个操作,IRunnableContext 提供了一个参数来定是不是在一个新的线E中q行操作?/span>
附:


Soap MacTavish 2011-04-17 21:58 发表评论
]]>SWT-多线E问?/title><link>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html</link><dc:creator>Soap MacTavish</dc:creator><author>Soap MacTavish</author><pubDate>Sun, 17 Apr 2011 13:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html</guid><wfw:comment>http://www.aygfsteel.com/hxlistiancai/comments/348453.html</wfw:comment><comments>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348453.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hxlistiancai/services/trackbacks/348453.html</trackback:ping><description><![CDATA[一.概述 <br /> 如果你是SWT/Jface的初学者,那么本片所描述的问题很可能是你已经到或者将要碰到的?<br /> q是关于多线E开辟的问题Q比较常见?<br /> <br /> ?问题Q?<br /> 当你在GUIȝE开辟一个新U程Q进行其它操作,q且需要更新UI控gQ意外发 <br /> 生了Q?<br /> Exception in thread "Thread-1" java.lang.NullPointerException?<br /> <br /> 三。解x?<br /> 使用:Display#asyncExecQRunnableQ或者Display#syncExecQRunnableQ?<br /> 把你的UI更新操作另开一个线E,比如Q?<br /> Display.getCurrent().asyncExec(new Runnable() { <br />     public void run() { <br />         button.setText("update"); <br />     } <br /> }Q?<br /> <br /> <br /> 如果其它数据处理操作耗时不长Q可以把q部分代码放入到与UI更新同一个线E, <br /> Display.getCurrent().asyncExec(new Runnable() { <br />     public void run() { <br />         //Do business action <br />         button.setText("update"); <br />     } <br /> }Q?<br /> <br /> 如果其它数据处理耗时长,那么Z不让UI响应q钝Q应该把逻辑操作和UI更新分开: <br /> Thread t = new Thread(new Runnable() { <br />     public void run() { <br />         //Do business action <br />         Display.getCurrent().asyncExec(new Runnable() { <br />             public void run() { <br />                 button.setText("update"); <br />             } <br />         }Q?<br />         <br />     } <br /> <br /> } <img src ="http://www.aygfsteel.com/hxlistiancai/aggbug/348453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hxlistiancai/" target="_blank">Soap MacTavish</a> 2011-04-17 21:57 <a href="http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT中从后台U程讉K前台界面lg的问?/title><link>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html</link><dc:creator>Soap MacTavish</dc:creator><author>Soap MacTavish</author><pubDate>Sun, 17 Apr 2011 13:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html</guid><wfw:comment>http://www.aygfsteel.com/hxlistiancai/comments/348454.html</wfw:comment><comments>http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348454.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hxlistiancai/services/trackbacks/348454.html</trackback:ping><description><![CDATA[<p>要在后台U程里对前台界面lgq行讉K.</p> <div><span style="font-size: 14px"><span style="font-family: 宋体">解决Ҏ是用Display对象,Display对象主要负责理事g循环和控制UIU程和其它线E之间的通信.</span></span></div> <div><span style="font-size: 14px"><span style="font-family: 宋体">Display.getDefault().asyncExec(new Runnable(){</span></span></div> <div><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><font face=""><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr></font><span style="font-size: 14px"><span style="font-family: 宋体"> public void run(){</span></span></div> <div><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><font face=""><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr></font><span style="font-size: 14px"><span style="font-family: 宋体"> //对前台界面进行操?/span></span></div> <div><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><font face=""><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr><span style="font-size: 14px"><span style="font-family: 宋体"> </span></span><wbr></wbr></font><span style="font-size: 14px"><span style="font-family: 宋体"> }</span></span></div> <div><span style="font-size: 14px"><span style="font-family: 宋体">});</span></span></div> <pre> <ol class="dp-j"> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="keyword">package</span><span> com.tr069im.ui;  </span></span> <li><span> </span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.SWT;  </span> <li><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.layout.GridData;  </span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.widgets.Button;  </span> <li><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.widgets.Display;  </span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.widgets.MessageBox;  </span> <li><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.widgets.ProgressBar;  </span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.eclipse.swt.widgets.Shell;  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="comment">/** </span>  <li><span><span id="wmqeeuq" class="comment"> * 此类通过实现SWT滚动条,说明多线E问?nbsp;.解决了后台线E访问前台界面的问题  </span> </span> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="comment"> * @author llwbrothers </span> </span> <li><span><span id="wmqeeuq" class="comment"> */</span><span> </span></span> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">class</span><span> Login </span><span id="wmqeeuq" class="keyword">implements</span><span> Runnable {  </span> <li><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> Shell shell;  </span> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> String loginResponse = </span><span id="wmqeeuq" class="string">"right"</span><span>;  </span> <li><span>    </span><span id="wmqeeuq" class="keyword">private</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">boolean</span><span> flag = </span><span id="wmqeeuq" class="keyword">false</span><span>;  </span> <li id="wmqeeuq" class="alt"><span> </span> <li><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> Login() {  </span> <li id="wmqeeuq" class="alt"><span> </span> <li><span>    }  </span> <li id="wmqeeuq" class="alt"><span> </span> <li><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> main(String[] args) {  </span> <li id="wmqeeuq" class="alt"><span>          </span> <li><span>        </span><span id="wmqeeuq" class="keyword">final</span><span> Display display = Display.getDefault();  </span> <li id="wmqeeuq" class="alt"><span>        shell = </span><span id="wmqeeuq" class="keyword">new</span><span> Shell(SWT.MIN);  </span> <li><span>        shell.setSize(</span><span id="wmqeeuq" class="number">290</span><span>, </span><span id="wmqeeuq" class="number">520</span><span>);  </span> <li id="wmqeeuq" class="alt"><span>        shell.setLocation(</span><span id="wmqeeuq" class="number">300</span><span>, </span><span id="wmqeeuq" class="number">5</span><span>);  </span> <li><span>        shell.setText(</span><span id="wmqeeuq" class="string">"SWT多线E?</span><span>);  </span> <li id="wmqeeuq" class="alt"><span> </span> <li><span>        </span><span id="wmqeeuq" class="comment">// dqx的进度条 </span><span> </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">final</span><span> ProgressBar pb1 = </span><span id="wmqeeuq" class="keyword">new</span><span> ProgressBar(shell, SWT.HORIZONTAL  </span> <li><span>                | SWT.SMOOTH);  </span> <li id="wmqeeuq" class="alt"><span>        pb1.setBounds(</span><span id="wmqeeuq" class="number">72</span><span>, </span><span id="wmqeeuq" class="number">282</span><span>, </span><span id="wmqeeuq" class="number">160</span><span>, </span><span id="wmqeeuq" class="number">20</span><span>);  </span> <li><span>        pb1.setLayoutData(</span><span id="wmqeeuq" class="keyword">new</span><span> GridData(GridData.FILL_HORIZONTAL));  </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="comment">// 昄q度条的最?</span><span> </span> <li><span>        pb1.setMinimum(</span><span id="wmqeeuq" class="number">0</span><span>);  </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="comment">// 讄q度条的最大?</span><span> </span> <li><span>        pb1.setMaximum(</span><span id="wmqeeuq" class="number">30</span><span>);  </span> <li id="wmqeeuq" class="alt"><span> </span> <li><span>        </span><span id="wmqeeuq" class="comment">// d按钮 </span><span> </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">final</span><span> Button btnLogin = </span><span id="wmqeeuq" class="keyword">new</span><span> Button(shell, SWT.FLAT | SWT.PUSH);  </span> <li><span>        btnLogin.setBounds(</span><span id="wmqeeuq" class="number">80</span><span>, </span><span id="wmqeeuq" class="number">363</span><span>, </span><span id="wmqeeuq" class="number">111</span><span>, </span><span id="wmqeeuq" class="number">36</span><span>);  </span> <li id="wmqeeuq" class="alt"><span>        btnLogin.setText(</span><span id="wmqeeuq" class="string">"取消"</span><span>);  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span>        shell.open();  </span> <li><span>        </span><span id="wmqeeuq" class="comment">// 异步U程处理其他数据 </span><span> </span> <li id="wmqeeuq" class="alt"><span>        display.asyncExec(</span><span id="wmqeeuq" class="keyword">new</span><span> Runnable() {  </span> <li><span>            </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li id="wmqeeuq" class="alt"><span>                Login pl = </span><span id="wmqeeuq" class="keyword">new</span><span> Login();  </span> <li><span>                Thread t = </span><span id="wmqeeuq" class="keyword">new</span><span> Thread(pl);  </span> <li id="wmqeeuq" class="alt"><span>                t.start();  </span> <li><span>            }  </span> <li id="wmqeeuq" class="alt"><span>        });  </span> <li><span>        </span><span id="wmqeeuq" class="comment">// dU程Q在U程中处理长旉的Q务,q最l反映在qxq度条上 </span><span> </span> <li id="wmqeeuq" class="alt"><span>        Runnable runnable = </span><span id="wmqeeuq" class="keyword">new</span><span> Runnable() {  </span> <li><span>            </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="keyword">for</span><span> (</span><span id="wmqeeuq" class="keyword">int</span><span> i = </span><span id="wmqeeuq" class="number">0</span><span>; i < </span><span id="wmqeeuq" class="number">30</span><span>; i++) {  </span> <li><span>                    </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span> <li id="wmqeeuq" class="alt"><span>                        Thread.sleep(</span><span id="wmqeeuq" class="number">100</span><span>);  </span> <li><span>                    } </span><span id="wmqeeuq" class="keyword">catch</span><span> (InterruptedException e) {  </span> <li id="wmqeeuq" class="alt"><span>                    }  </span> <li><span>                    display.asyncExec(</span><span id="wmqeeuq" class="keyword">new</span><span> Runnable() {  </span> <li id="wmqeeuq" class="alt"><span>                        </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li><span>                            </span><span id="wmqeeuq" class="keyword">if</span><span> (pb1.isDisposed())  </span> <li id="wmqeeuq" class="alt"><span>                                </span><span id="wmqeeuq" class="keyword">return</span><span>;  </span> <li><span>                            </span><span id="wmqeeuq" class="comment">// q度条递增 </span><span> </span> <li id="wmqeeuq" class="alt"><span>                            pb1.setSelection(pb1.getSelection() + </span><span id="wmqeeuq" class="number">1</span><span>);  </span> <li><span>                        }  </span> <li id="wmqeeuq" class="alt"><span>                    });  </span> <li><span>                    </span><span id="wmqeeuq" class="keyword">if</span><span> (flag) { </span><span id="wmqeeuq" class="comment">// 作ؓ标志Q滚动条v作用 </span><span> </span> <li id="wmqeeuq" class="alt"><span>                        </span><span id="wmqeeuq" class="keyword">break</span><span>;  </span> <li><span>                    }  </span> <li id="wmqeeuq" class="alt"><span>                    </span><span id="wmqeeuq" class="keyword">if</span><span> (i == </span><span id="wmqeeuq" class="number">29</span><span>) {  </span> <li><span>                        open();  </span> <li id="wmqeeuq" class="alt"><span>                    }  </span> <li><span>                }  </span> <li id="wmqeeuq" class="alt"><span>            }  </span> <li><span>        };</span><span id="wmqeeuq" class="comment">// 启动q个U程 </span><span> </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">new</span><span> Thread(runnable).start();  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">while</span><span> (!shell.isDisposed()) { </span><span id="wmqeeuq" class="comment">// 如果ȝ体没有关?</span><span> </span> <li><span>            </span><span id="wmqeeuq" class="keyword">if</span><span> (!display.readAndDispatch()) { </span><span id="wmqeeuq" class="comment">// 如果display不忙 </span><span> </span> <li id="wmqeeuq" class="alt"><span>                display.sleep(); </span><span id="wmqeeuq" class="comment">// 休眠 </span><span> </span> <li><span>            }  </span> <li id="wmqeeuq" class="alt"><span>        }  </span> <li><span>        display.dispose(); </span><span id="wmqeeuq" class="comment">// 销毁display </span><span> </span> <li id="wmqeeuq" class="alt"><span>    }  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span> <li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment">// 收到验证信息后进?</span><span> </span> <li><span>            </span><span id="wmqeeuq" class="keyword">if</span><span> (loginResponse.equals(</span><span id="wmqeeuq" class="string">"right"</span><span>)) {  </span> <li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="comment">// 后台U程讉K前台界面 </span><span> </span> <li><span>                Display.getDefault().asyncExec(</span><span id="wmqeeuq" class="keyword">new</span><span> Runnable() {  </span> <li id="wmqeeuq" class="alt"><span>                    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li><span>                        flag = </span><span id="wmqeeuq" class="keyword">true</span><span>;  </span> <li id="wmqeeuq" class="alt"><span>                        Shell shell = </span><span id="wmqeeuq" class="keyword">new</span><span> Shell(SWT.MIN);  </span> <li><span>                        MessageBox messageBox = </span><span id="wmqeeuq" class="keyword">new</span><span> MessageBox(shell,  </span> <li id="wmqeeuq" class="alt"><span>                                SWT.ICON_WARNING);  </span> <li><span>                        messageBox.setMessage(</span><span id="wmqeeuq" class="string">"用户名或密码错误!"</span><span>);  </span> <li id="wmqeeuq" class="alt"><span>                        messageBox.open();  </span> <li><span>                    }  </span> <li id="wmqeeuq" class="alt"><span>                });  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span>            } </span><span id="wmqeeuq" class="keyword">else</span><span> {      </span> <li><span>            }  </span> <li id="wmqeeuq" class="alt"><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (Exception ee) {  </span> <li><span>        }  </span> <li id="wmqeeuq" class="alt"><span>    }  </span> <li><span> </span> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> open() {  </span> <li><span>        Display.getDefault().asyncExec(</span><span id="wmqeeuq" class="keyword">new</span><span> Runnable() {  </span> <li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> run() {  </span> <li><span>                </span><span id="wmqeeuq" class="comment">// q度条进行完之后Q执行的E序 </span><span> </span> <li id="wmqeeuq" class="alt"><span>            }  </span> <li><span>        });  </span> <li id="wmqeeuq" class="alt"><span>    }  </span> <li><span>}  </span></li> </ol> </pre> <img src ="http://www.aygfsteel.com/hxlistiancai/aggbug/348454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hxlistiancai/" target="_blank">Soap MacTavish</a> 2011-04-17 21:57 <a href="http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH框架的集成步?/title><link>http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html</link><dc:creator>Soap MacTavish</dc:creator><author>Soap MacTavish</author><pubDate>Fri, 25 Mar 2011 12:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html</guid><wfw:comment>http://www.aygfsteel.com/hxlistiancai/comments/347035.html</wfw:comment><comments>http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hxlistiancai/comments/commentRss/347035.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hxlistiancai/services/trackbacks/347035.html</trackback:ping><description><![CDATA[<font color="#000000" size="2" face="Tahoma, Helvetica, sans-serif, Verdana, Arial">S2SH框架集成步骤Q?br /> <br /> 1、框架依赖jar文g<br /> Q这些jar包可以去官网自己下蝲Q地址不在q接Q?br /> <br /> 1.1 sping     所依赖工程 spring-framework-2.5.6<br />      dist\spring.jar          <br />      lib\cglib\cglib-nodep-2.1_3.jar        <br />      lib\jakarta-commons\commons-logging.jar        <br />      lib\aspectj\aspectjweaver.jar和aspectjrt.jar      lib\j2ee\common-annotations.jar<br /> <br /> 1.2 hibernate   所依赖工程 hibernate-distribution-3.3.2.GA<br />      hibernate3.jar<br />      lib\required\jta-1.1.jar        javassist-3.9.0.GA.jar        dom4j-1.6.1.jar        commons-collections-3.1.jar        antlr-2.7.6.jar        slf4j-api-1.5.8.jar<br />      lib\bytecode\cglib\cglib-2.2.jar<br />      [二~存可选]lib\optional\oscache\oscache-2.1.jar        同时需要把\project\etc\oscache.properties 拯到src ?br />      [二~存可选]lib\optional\ehcache\ehcache-1.2.3.jar  同时需要把\project\etc\ehcache.xml<br />      [二~存可选]lib\optional\c3p0\    配置c3p0数据库连接池的?作用{同于apache的dbcp<br /> <br />      *使用hibernate注解Qhibernate-annotations-3.4.0.GA\<br />      hibernate-annotations.jar<br />      lib\hibernate-commons-annotations.jar<br />      lib\ejb3-persistence.jar<br /> <br />      *若用slf的日志还需要:slf4j-1.5.8<br />      slf4j-nop-1.5.8.jar<br /> <br /> 1.3 struts2  所依赖工程  struts-2.1.8.1<br />      lib目录下的Q?br />         struts2-core-2.1.8.1.jar<br />         xwork-core-2.1.6.jar<br />         ognl-2.7.3.jar<br />             freemarker-2.3.15.jar<br />         commons-fileupload-1.2.1.jar<br />         commons-io-1.3.2.jar<br />         struts2-spring-plugin-2.1.8.1.jar<br />              aopalliance-1.0.jar<br />         classworlds-1.1.jar<br />         commons-beanutils-1.7.0.jar<br />         commons-chain-1.2.jar<br />         commons-collections-3.2.jar  在hibernate中已l引?nbsp;         <br />         commons-digester-2.0.jar        <br />         commons-lang-2.3.jar<br />         commons-logging-1.0.4.jar  此文件在spring中已存在<br />         commons-logging-api-1.1.jar<br />         commons-validator-1.3.1.jar<br />         ezmorph-1.0.3.jar<br />         json-lib-2.1.jar 若用json可?br />         oro-2.0.8.jar<br />         oval-1.31.jar<br /> <br /> <br /> 2、框架的配置文g<br /> <br /> 2.1 spring框架配置文g及集成hibernate、二U缓?br />         $WEB_ROOT/WEB-INF/applicationContext.xml<br />             src/ehcache.xml<br /> <br /> <?xml version="1.0" encoding="UTF-8"?><br /> <beans xmlns="http://www.springframework.org/schema/beans"<br />         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />         xmlns:context="http://www.springframework.org/schema/context"<br />         xmlns:aop="http://www.springframework.org/schema/aop"<br />         xmlns:tx="http://www.springframework.org/schema/tx"<br />         xsi:schemaLocation="http://www.springframework.org/schema/beans<br />            <http://www.springframework.org/schema/beans/spring-beans-2.5.xsd><br />            <http://www.springframework.org/schema/context> <http://www.springframework.org/schema/context/spring-context-2.5.xsd><br />            <http://www.springframework.org/schema/aop> <http://www.springframework.org/schema/aop/spring-aop-2.5.xsd><br />            <http://www.springframework.org/schema/tx> <http://www.springframework.org/schema/tx/spring-tx-2.5.xsd>"><br />     <br />     <!-- 配置数据?--><br />         <context:property-placeholder location="classpath:jdbc4mysql.properties" /><br />         <bean id="dataSource"<br />                 class="org.apache.commons.dbcp.BasicDataSource"<br />                 destroy-method="close"><br />                 <property name="driverClassName" value="${driverClassName}" /><br />                 <property name="url" value="${url}" /><br />                 <property name="username" value="${username}" /><br />                 <property name="password" value="${password}" /><br />                 <!-- q接池启动时的初始?--><br />                 <property name="initialSize" value="${initialSize}" /><br />                 <!-- q接池的最大?--><br />                 <property name="maxActive" value="${maxActive}" /><br />                 <!-- 最大空闲?当经q一个高峰时间后Q连接池可以慢慢已l用不到的连接慢慢释放一部分Q一直减到maxIdle为止 --><br />                 <property name="maxIdle" value="${maxIdle}" /><br />                 <!--  最空闲?当空闲的q接数少于阀值时Q连接池׃预申请去一些连?以保证应?--><br />                 <property name="minIdle" value="${minIdle}" /><br />         </bean><br />         <br />          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><br />          <property name="dataSource" ref="dataSource"/><br />          <property name="mappingResources"><br />             <list><br />               <value>cn/tsp2c/sshdemo/domain/User.hbm.xml</value><br />             </list><br />          </property><br />          <property name="hibernateProperties"><br />             <value><br />                 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<br />                 hibernate.hbm2ddl.auto=update<br />                 hibernate.show_sql=false<br />                 hibernate.format_sql=false<br />                 hibernate.cache.use_second_level_cache=true<br />                 hibernate.cache.use_query_cache=false<br />                 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider<br />               </value><br />          </property><br />          </bean><br />         <br />     <!-- 配置事务理?--><br />         <bean id="txManager"<br />                 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><br />                 <property name="dataSource" ref="dataSource" /><br />         </bean><br />         <br />         <!-- spring支持两种事务声明方式Q注解和xml配置Q徏议用注解方?--><br />         <!-- 采用@Transactional注解方式使用事务,在daocdҎ需用注解方式标明事务方?--><br />         <tx:annotation-driven transaction-manager="txManager" />   <br /> <br />      <!-- 用户DAO实现,实现方式QJDBC <br />     <bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.UserDaoImpl"><br />         <property name="dataSource" ref="dataSource"/><br />     </bean><br />     --><br />     <!-- 用户DAO实现,实现方式Qhibernte  -->    <br />     <bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.hibernate.UserDaoHibernateImpl"><br />         <property name="sessionFactory" ref="sessionFactory"/><br />     </bean><br />    <br />      <br />         <!-- 用户服务bean --><br />         <bean id="userService" class="cn.tsp2c.sshdemo.service.impl.UserServiceImpl" ><br />            <property name="userDao" ref="userDao"/><br />         </bean><br />         <br />         <!-- 用户Action bean,scope=prototypeW合struts2的action生成机制 --><br />     <bean id="userAction" class="cn.tsp2c.sshdemo.web.action.UserAction" scope="prototype"><br />         <property name="userService" ref="userService"/><br />     </bean><br /> </beans><br /> <br /> 其中集成hibernate需要属性文Ӟjdbc4mysql.properties<br /> <br /> driverClassName=com.mysql.jdbc.Driver<br /> url=jdbc\:mysql\://localhost\:3306/sshdemodb?useUnicode\=true&characterEncoding\=utf-8<br /> username=root<br /> password=1234<br /> initialSize=1<br /> maxActive=500<br /> maxIdle=2<br /> minIdle=1<br /> <br /> 需要配|hibernate的二U缓存,如用ehcacheQ在src路径下加入ehcache.xml<br /> <?xml version="1.0" encoding="UTF-8"?><br /> <!-- <br />      defaultCache 讄节点为缺省的~存{略<br />      maxElementsInMemory 讄内存中最大允许存在的对象数量<br />      eternal 讄~存中的对象是否永远不过?br />      overflowToDisk 把超出内存设定的溢出的对象存攑ֈ盘?br />      timeToIdleSeconds 讄~存对象I闲多长旉p?q期的对象会被清除掉<br />      timeToLiveSeconds 讄~存对象ȝ存活旉<br />      diskPersistent 当jvml束时是否把内存中的对象持久化到盘<br />      diskExpiryThreadIntervalSeconds 讄用于清除q期对象的监听线E的轮询旉<br /> --><br /> <ehcache><br />     <diskStore path="e:\cache"/><br />     <defaultCache  maxElementsInMemory="1000" eternal="false" overflowToDisk="true"<br />         timeToIdleSeconds="120"<br />         timeToLiveSeconds="180"<br />         diskPersistent="false"<br />         diskExpiryThreadIntervalSeconds="60"/><br />         <cache name="cn.tsp2c.sshdemo.domain.User" maxElementsInMemory="100" eternal="false"<br />     overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="500" diskPersistent="false"/><br /> </ehcache><br /> <br /> 2.2 struts2的配|文Ӟ src/struts.xml<br /> <br /> <?xml version="1.0" encoding="UTF-8" ?><br /> <!DOCTYPE struts PUBLIC<br />     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />     "<http://struts.apache.org/dtds/struts-2.0.dtd>"><br /> <br /> <struts><br />     <!-- 指定web应用的默认编码ؓUTF-8Q功能等同于request.setCharacterEncoding() --><br />     <constant name="struts.i18n.encoding" value="UTF-8"/><br />     <!-- 指定struts2的请求处理后~Q匹?.action的所有请?--><br />     <constant name="struts.action.extension" value="action"/><br />     <!-- 关闭struts2?动态方法调?使用通配W匹配方式实现动态方法调?--><br />     <constant name="struts.enable.DynamicMethodInvocation" value="false"/><br />     <!-- 讄览器是否缓存静态页面,默认为trueQ徏议:开发阶D关闭,生环境打开 --><br />     <constant name="struts.serve.static.browserCache" value="false" /><br />     <!-- 当struts.xml修改时自动重新加载,默认为false。徏议:开发阶D|开Q生产环境关?--><br />     <constant name="struts.configuration.xml.reload" value="true"/><br />     <!-- 开发模式下打开Q便于打印详l日志,生环境下关?--><br />     <constant name="struts.devMode" value="true" /><br />     <!-- 讄视图主题为css_xhtml --><br />     <constant name="struts.ui.theme" value="simple" /><br />     <!-- 指定struts中action交由spring创徏 --><br />     <constant name="struts.objectFactory" value="spring"/><br />     <br />     <package name="base" extends="struts-default"><br />         <global-results><br />                <result name="message">/WEB-INF/page/message.jsp</result><br />                <result name="error">/WEB-INF/page/error.jsp</result><br />         </global-results><br />     </package><br />     <br />     <package name="user" namespace="/user" extends="base"><br />         <action name="login" class="cn.tsp2c.sshdemo.web.action.LoginAction" method="execute"><br />             <result name="success">/index.jsp</result><br />             <result name="input">/login.jsp</result><br />         </action><br />         <action name="user_*" class="cn.tsp2c.sshdemo.web.action.UserAction" method="{1}"><br />             <result name="list">/userlist.jsp</result><br />             <result name="add" type="redirect">/useradd.jsp</result><br />         </action><br />     </package><br /> </struts><br /> <br /> <br /> 3、需要把spring、strusts2框架注入到web容器Qhibernate框架被spring集成Q和web容器没有关系。所以不需要在web.xml中配|)<br /> <br /> web.xml文gQ?br /> <?xml version="1.0" encoding="UTF-8"?><br /> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"<br />         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <br />         <http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>"><br />     <!-- 配置spring的xml文gQ若配置文g有多个,可用,或空格分?--><br />         <context-param><br />                 <param-name>contextConfigLocation</param-name><br />                 <param-value><br />                         /WEB-INF/applicationContext.xml<br />                 </param-value><br />         </context-param><br /> <br />         <!-- web容器加蝲struts2配置 --><br />         <filter><br />                 <filter-name>struts2</filter-name><br />                 <filter-class><br />                         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<br />                 </filter-class><br />         </filter><br />         <filter-mapping><br />                 <filter-name>struts2</filter-name><br />                 <url-pattern>/*</url-pattern><br />         </filter-mapping><br /> <br />         <!-- web容器加蝲spring配置 --><br />         <listener><br />                 <listener-class><br />                         org.springframework.web.context.ContextLoaderListener<br />                 </listener-class><br />         </listener><br /> <br />         <!-- web容器增加字符集{换的qo?׃struts2框架解决了字W集转码Q此配置可以注释?<br />         <filter><br />                 <filter-name>encoding</filter-name><br />                 <filter-class><br />                         org.springframework.web.filter.CharacterEncodingFilter<br />                 </filter-class><br />                 <init-param><br />                         <param-name>encoding</param-name><br />                         <param-value>UTF-8</param-value><br />                 </init-param><br />         </filter><br />         <filter-mapping><br />                 <filter-name>encoding</filter-name><br />                 <url-pattern>/*</url-pattern><br />         </filter-mapping><br />     --><br />         <!-- 解决hibernate的session关闭D延迟加蝲异常的问?--><br />         <!--  <br />                 <filter><br />                 <filter-name>Spring OpenEntityManagerInViewFilter</filter-name><br />                 <filter-class><br />                   org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter<br />                 </filter-class><br />                 </filter><br />                 <filter-mapping><br />                   <filter-name>Spring OpenEntityManagerInViewFilter</filter-name><br />                   <url-pattern>/*</url-pattern><br />                 </filter-mapping><br />         --><br /> <br />         <welcome-file-list><br />                 <welcome-file>index.jsp</welcome-file><br />         </welcome-file-list><br /> </web-app><br /> <br /> 3.1 web容器集成spring<br /> <br />         <!-- 配置spring的xml文gQ若配置文g有多个,可用,或空格分?--><br />         <context-param><br />                 <param-name>contextConfigLocation</param-name><br />                 <param-value><br />                         /WEB-INF/applicationContext.xml<br />                 </param-value><br />         </context-param><br /> <br />         <!-- web容器加蝲spring配置 --><br />         <listener><br />                 <listener-class><br />                         org.springframework.web.context.ContextLoaderListener<br />                 </listener-class><br />         </listener><br /> <br /> <br /> 3.2 web容器集成struts2<br />         <!-- web容器加蝲struts2配置 --><br />         <filter><br />                 <filter-name>struts2</filter-name><br />                 <filter-class><br />                         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<br />                 </filter-class><br />         </filter><br />         <filter-mapping><br />                 <filter-name>struts2</filter-name><br />                 <url-pattern>/*</url-pattern><br />         </filter-mapping><br /> <br /> 3.3 关于在session范围内解决hibernate的gq加载问?br /> <br /> <!-- 解决hibernate的session关闭D延迟加蝲异常的问?--><br /> <filter><br />     <filter-name>HibernateSessionInViewFilter</filter-name><br />     <filter-class><br />       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />     </filter-class><br /> </filter><br /> <filter-mapping><br />     <filter-name>HibernateSessionInViewFilter</filter-name><br />     <url-pattern>/*</url-pattern><br /> </filter-mapping><br /> <br /> <br /> 4、如何用s2sh框架实现MVC<br /> <br /> 4.1 action<br /> <br /> struts.xml:<br />     <!-- 指定struts中action交由spring创徏 --><br />     <constant name="struts.objectFactory" value="spring"/><br /> <br /> <action name="user_*" class="cn.tsp2c.sshdemo.web.action.UserAction" method="{1}"><br />     <result name="list">/userlist.jsp</result><br />     <result name="add" type="redirect">/useradd.jsp</result><br /> </action><br /> <br /> 在spring中配|:<br /> <!-- 用户Action bean,scope=prototypeW合struts2的action生成机制 --><br />     <bean id="userAction" class="cn.tsp2c.sshdemo.web.action.UserAction" scope="prototype"><br />         <property name="userService" ref="userService"/><br />     </bean><br /> <br /> 4.2 service<br /> <!-- 用户服务bean --><br /> <bean id="userService" class="cn.tsp2c.sshdemo.service.impl.UserServiceImpl" ><br />    <property name="userDao" ref="userDao"/><br /> </bean><br /> <br /> 4.3 dao<br /> <!-- 用户DAO实现,实现方式QJDBC --><br /> <bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.UserDaoImpl"><br />     <property name="dataSource" ref="dataSource"/><br /> </bean><br /> </font> <img src ="http://www.aygfsteel.com/hxlistiancai/aggbug/347035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hxlistiancai/" target="_blank">Soap MacTavish</a> 2011-03-25 20:18 <a href="http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse提供便的ҎQhibernate 反向数据?http://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.htmlSoap MacTavishSoap MacTavishTue, 22 Mar 2011 04:52:00 GMThttp://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.htmlhttp://www.aygfsteel.com/hxlistiancai/comments/346739.htmlhttp://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.html#Feedback0http://www.aygfsteel.com/hxlistiancai/comments/commentRss/346739.htmlhttp://www.aygfsteel.com/hxlistiancai/services/trackbacks/346739.html

原文地址Q?a >http://hi.baidu.com/gg7663/blog/item/f7bfb70f74a5c1f536d122b9.html

开发项目涉及到的表太多Q一个一个的写JAVA实体cd是费事。MyEclipse提供便的ҎQ反向数据库 

***选择表反向的时候一ơ全选上Q省的后面配那个发现兌表选项

步骤大致如下: 
W一步: 
window-->open Perspective-->MyEclipse Java Persistence 
操作后会出现一个视图DB Brower:MyEclipse Derby 

在空白区点击右键,新徏一个数据库对象。我用的是mysqlQ其实我一直想用oracle之类的,只是机子内存,又懒得倒腾别的Q结果截个图吧:

左边的属性按照自׃用的数据库填p了,左边部分是我建好以后的结果,数据库名叫shopQ有个user?是专门这ơ测试用?/span>




W二步: 
新徏一个WEB目 
然后选中目右键-->MyEclipse-->add Hibernate Capabilities 

如果需要用到在实体cMd注释的话那么选中紧挨着的add Hibernate Annotations SupportQ据说现在都用annotations了就选上吧!Q)

然后下一步选中一个目录存放自动生成hibernate.cfg.xml文gQ一般毫无例外的攑֜src根目录下Q下一步选中一个DB Driver中我们第一步徏立的那个Q对我来说是com.mysql....反正是自己建的那个呗)Q然后下一步选中一个目录存放自动生成的HibernateSessionFactory工具c?Q结果出来以后我看了一下,q个hibernateSessionFactory工具cd是一个拿Session的单例,q有一些其它关闭session之类的方法,一看便知。下图是生成的配|文Ӟ



W三步反向生成实体类 

到DB Brower中找到要反向的表选中q且点击右键--->Hibernate Reverse Enginnering

 

看选项Qjava src folder 源码包,不用多解释,java package——存攑ְ要反转出来的实体c,选择目录Q应该是提前建好的com.xxx.model之类的包Q;Create pojo<>db。。。这个选项选中Q就是我们徏立从表到单java 对象Q即pojoQ的配置Q把下面的add hibernate mapping annotations to pojo的选上Q其它不,q个选项用来“d映射注解到pojo对象?#8221;Q它上面的那个选项用来创徏xml的,据说不太用了Q就用annotation吧!


q样应该够了,下一?/span>

看图Qtype Mapping要选上hibernatetypesQ这栯些注解都是来?nbsp;javax.persistence.*?Q刚观察q!Q?/span>

id generator 看下拉列表就知道是配|id生成{略?/span>

那两个enable 是说映射关系发现QdetectionQ,明白了吧Q英文好是沑օQ不用像我一栯得查字典了?/span>


下一步:没啥理解不了?动手点点q道了



直接完成Q发C码很漂亮Q注释很完美Q而且肯定没有错误Q几分钟都能搞定数十个表Q不得不感叹myeclipseQ真是个大金ѝ?/span>



Soap MacTavish 2011-03-22 12:52 发表评论
]]>
Linux 命oqxU篏 http://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.htmlSoap MacTavishSoap MacTavishSun, 06 Mar 2011 02:16:00 GMThttp://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.htmlhttp://www.aygfsteel.com/hxlistiancai/comments/345818.htmlhttp://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.html#Feedback0http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345818.htmlhttp://www.aygfsteel.com/hxlistiancai/services/trackbacks/345818.html
 记得刚刚接触Linux的时候,自己真是一名不折不扣的菜鸟Q通过一q的努力Q自己可以单独操作Linux了,我将把以后遇到的比较有用的命令积累在q篇博客上?

     

      1.  Fedora 版Linux   ifconfig
           /sbin/ipconfig

      2.  讄tomcatQ系l启动,同时tomcat也启?/p>

           echo "/data/webapp/reg/bin/startup.sh">>/etc/rc.local

      3.  查看pȝ Java q程

           ps -ef|grep java

      4.  讄动态IP

           ifconfig eth0 192.168.1.101 up

      5.  在ubuntu下修Ҏ?/p>

           gedit /etc/profile

      6.  netstat –anput   查看端口占有情况

      7.  killall –9 java   杀L有系l中javaq程

      8.  ./startup.sh ; tail –f /data/webapp/tomcat/logs/catalina.out   启动tomcatQƈ且查看日?/p>

      9.  vi~辑文gӞ误写了,先按ESC 再按u Q可以恢复?/p>

    10.  改变一个文件夹下所有文件的所有?/p>

           chown –R xg.xg folder

    11.  tomcat 随着pȝ自启?/p>

           1. 把tomcat和程序放?home/user

           2. 改变tomcat的所有?nbsp; chown –R hans.hans tomcat

           3. echo "/home/hans/tomcat/startup.sh">>/etc/profile

    12.  q有一点要提醒修改linux文gӞ一定要先备?/p>

    13.  扚w修改linux下文件的~码Q?/p>

          cd /home/hans/test

          find ./ -type f -name "*.c"|while read line;do
          echo $line
          iconv -f GB2312 -t UTF-8 $line > ${line}.utf8
          mv $line ${line}.gb2312
          mv ${line}.utf8 $line
          done

    14.  vi / vim ~辑文gӞ昄行号

          vim /etc/vimrc

            在末行处加上 Q?set number

 

 

 

 

Fedora 12 ?/p>

    1.  Fedora 12 安装后不能远E用CRTdQ?/p>

           ntsysv

           出现囑Ş界面选择ssh服务OK

    2.  Fedora 12 ?Ubuntu的安装Y件有所不同

         Fedora Q?yum install gcc

         Ubuntu :  apt-get install gcc

    3.  VMware 全屏

         首先 Ctrl+Alt+Enter 全屏 但是linux只是占中间的屏幕Q这是因为linux的分辨率与window的分辨率不一P调整linux的分辨率和windows一样就好了?/p>

    4.  Fedora 9 安装完后不能使用 ifconfig Q还得这P/sbin/ifconfig 才有?/p>

         vi /etc/profile

          if [ "$EUID" = "0" ]; then
          pathmunge /sbin
          pathmunge /usr/sbin
          pathmunge /usr/local/sbin
          fi

        修改Q把W一行注释掉

        #if [ "$EUID" = "0" ]; then
          pathmunge /sbin
          pathmunge /usr/sbin
          pathmunge /usr/local/sbin
          fi

       然后重启Q就好了!         

   5.  安装中文输入?

       yum install scim* -y



Soap MacTavish 2011-03-06 10:16 发表评论
]]>
用java实现Mail的发?/title><link>http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html</link><dc:creator>Soap MacTavish</dc:creator><author>Soap MacTavish</author><pubDate>Sat, 26 Feb 2011 03:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html</guid><wfw:comment>http://www.aygfsteel.com/hxlistiancai/comments/345228.html</wfw:comment><comments>http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345228.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hxlistiancai/services/trackbacks/345228.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html'>阅读全文</a><img src ="http://www.aygfsteel.com/hxlistiancai/aggbug/345228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hxlistiancai/" target="_blank">Soap MacTavish</a> 2011-02-26 11:09 <a href="http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TableҎ表头的排序Demohttp://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.htmlSoap MacTavishSoap MacTavishSat, 26 Feb 2011 02:51:00 GMThttp://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.htmlhttp://www.aygfsteel.com/hxlistiancai/comments/345227.htmlhttp://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.html#Feedback0http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345227.htmlhttp://www.aygfsteel.com/hxlistiancai/services/trackbacks/345227.html装h的方法,用到的思\是:
1.规定好排序规则,q里用的是根据第一列升序排?br /> 2.排序的列d好事件响?br />

1.q里是排序规则及其实?br /> package com.bx.ui;

import java.text.Collator;
import java.util.Locale;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

public class TableColumnSorter {

 public static void addNumberSorter(final Table table,
   final TableColumn column) {
  column.addListener(SWT.Selection, new Listener() {
   boolean isAscend = true; // 按照升序排序

   public void handleEvent(Event e) {
    int columnIndex = getColumnIndex(table, column);
    TableItem[] items = table.getItems();
    // 使用冒法进行排?br />     for (int i = 1; i < items.length; i++) {
     String strvalue2 = items[i].getText(columnIndex);
     if (strvalue2.equalsIgnoreCase("")) {
      // 当遇到表g的空目Ӟ停止往下检索排序项?br />       break;
     }
     for (int j = 0; j < i; j++) {
      String strvalue1 = items[j].getText(columnIndex);
      // 字W串cd数据转化为floatcd
      float numbervalue1 = Float.valueOf(strvalue1);
      float numbervalue2 = Float.valueOf(strvalue2);
      boolean isLessThan = false;
      if (numbervalue2 < numbervalue1) {
       isLessThan = true;
      }
      if ((isAscend && isLessThan)
        || (!isAscend && !isLessThan)) {
       String[] values = getTableItemText(table, items[i]);
       Object obj = items[i].getData();
       items[i].dispose();
       TableItem item = new TableItem(table, SWT.NONE, j);
       item.setText(values);
       item.setData(obj);
       items = table.getItems();
       break;
      }
     }
    }
    table.setSortColumn(column);
    table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));
    isAscend = !isAscend;
   }
  });
 }

 public static void addStringSorter(final Table table,
   final TableColumn column) {
  column.addListener(SWT.Selection, new Listener() {
   boolean isAscend = true; // 按照升序排序
   Collator comparator = Collator.getInstance(Locale.getDefault());

   public void handleEvent(Event e) {
    int columnIndex = getColumnIndex(table, column);
    TableItem[] items = table.getItems();
    // 使用冒法进行排?br />     for (int i = 1; i < items.length; i++) {
     String str2value = items[i].getText(columnIndex);
     if (str2value.equalsIgnoreCase("")) {
      // 当遇到表g的空目Ӟ停止往下检索排序项?br />       break;
     }
     for (int j = 0; j < i; j++) {
      String str1value = items[j].getText(columnIndex);
      boolean isLessThan = comparator.compare(str2value,
        str1value) < 0;
      if ((isAscend && isLessThan)
        || (!isAscend && !isLessThan)) {
       String[] values = getTableItemText(table, items[i]);
       Object obj = items[i].getData();
       items[i].dispose();
       TableItem item = new TableItem(table, SWT.NONE, j);
       item.setText(values);
       item.setData(obj);
       items = table.getItems();
       break;
      }
     }
    }
    table.setSortColumn(column);
    table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));
    isAscend = !isAscend;
   }
  });
 }

 public static int getColumnIndex(Table table, TableColumn column) {
  TableColumn[] columns = table.getColumns();
  for (int i = 0; i < columns.length; i++) {
   if (columns[i].equals(column))
    return i;
  }
  return -1;
 }

 public static String[] getTableItemText(Table table, TableItem item) {
  int count = table.getColumnCount();
  String[] strs = new String[count];
  for (int i = 0; i < count; i++) {
   strs[i] = item.getText(i);
  }
  return strs;
 }

 
 /*
  * table.getColumn(0).addSelectionListener(
     new SelectionAdapter()
     {
      public void widgetSelected(SelectionEvent e)
      {

       //调用排序文gQ处理排?br />        new TableColumnSorter().addStringSorter(table, table.getColumn(0));
      }
     });
  *
  */
}


2.q里在table中每列实例化的时候添加的列监听事?br />

/*
   *
   * d监听事g
   *
   */
  table.getColumn(0).addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent e) {

    // 调用排序文gQ处理排?br />     TableColumnSorter.addStringSorter(table, table
      .getColumn(0));
   }
  });



试l果׃在截图表C?

Soap MacTavish 2011-02-26 10:51 发表评论
]]>
一道体现面向对象思想的小例题http://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.htmlSoap MacTavishSoap MacTavishFri, 08 Oct 2010 13:24:00 GMThttp://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.htmlhttp://www.aygfsteel.com/hxlistiancai/comments/334001.htmlhttp://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.html#Feedback0http://www.aygfsteel.com/hxlistiancai/comments/commentRss/334001.htmlhttp://www.aygfsteel.com/hxlistiancai/services/trackbacks/334001.html
q是一道简单的模拟学生理pȝ的小例子Q?br />
①: 首先新徏一个Studentc,里面包含了学生的各个属性,代码如下Q?br />
public class Student {
  
//学生的属性:int型的q龄Q分敎ͼString型的名字Q等U,专业{?br />   private int age;    
  private int score;
  private String name;
  private String level;
  private String department;
  
  /**************属性的构造方?***********/
  //通过getScore获取分数Q通过setScore讄分数?br />   public int getScore(){
   return score;
  }
  public void setScore(int score){
   this.score=score;
  }
  
  //通过getName获取姓名Q通过setName修改姓名?br />   public String getName(){
   return name;
  }
  public void setName(String name){
   this.name=name;
  }
  
  //通过getAge获取q龄Q通过setAge修改q龄?br />   public int getAge(){
   return age;
  }
  public void setAge(int age){
   this.age=age;
  }
  
  //通过getDepartment获取部门Q通过setDepartment修改部门?br />   public String getDepartment(){
   return department;
  }
  public void setDepartment(String department){
   this.department=department;
  }
  
  //U别Ҏ
  public String getLevel(){
   return level;
  }
  public void setLevel(String level){
   this.level=level;
  }
  
  
}

注:q里其实可以加入cL?
public void Student (int age , int score , String  name , String level , String  department)
        {
                this.age = age;
                this.score = score;
                this.name = name;
                this.level = level;
                this.department = department;
        }
个h认ؓ使用cL法可以在dC实例化的时候直接将参数讄好,减少代码量?br />

②:然后新徏一个等U划分类Q根据学生分敎ͼ划分aQbQcQd四个{Qƈ在控制台命o行中昄出来Q代码如下:

public class GetScore{
 public void getScore(Student[] stuArr){
  for(int i = 0 ; i < stuArr.length ; i++)
  {
  
   if(stuArr[i] != null)
   {
    int z;
    z = stuArr[i].getScore() / 10;
/**************switch函数的应用,本h没有列出每一U的判断只是象征表示了一下,有兴的可以自己把分数的每种情况补全***************/
    switch(z){
    case 9:{System.out.println(stuArr[i].getName() + "是A{?); break;}
    case 8:{System.out.println(stuArr[i].getName() + "是B{?); break;}
    case 7:{System.out.println(stuArr[i].getName() + "是C{?); break;}
    default:{System.out.println(stuArr[i].getName() + "是D{?);}
   }
   System.out.println(stuArr[i].getName() + "-----" + stuArr[i].getScore() + "-----" + stuArr[i].getAge());    
  }
  
 }
 }
}




③:最后新Zc,里面实例化每一个学生,q且调用{划分cM的划分函敎ͼ代码如下Q?br />

 public class MainStu {
 public static void main(String args[]){
  Student[] stuArr= new Student[10];
  
  //实例化每一个学生ƈ在学生类数组里添加每一个新人;
  Student s0 = new Student();
  s0.setName("Soap");
  s0.setAge(22);
  s0.setScore(60);
  s0.setDepartment("计算?);
  stuArr[0] = s0;
  
  Student s1 = new Student();
  s1.setName("Price");
  s1.setAge(21);
  s1.setScore(88);
  s1.setDepartment("计算?);
     stuArr[1] = s1;

  Student s2 = new Student();
  s2.setName("Rouch");
  s2.setAge(24);
  s2.setScore(87);
  s2.setDepartment("计算?);
  stuArr[2] = s2;
  
  Student s3 = new Student();
  s3.setName("Ghost");
  s3.setAge(20);
  s3.setScore(70);
  s3.setDepartment("计算?);
     stuArr[3] = s3;

   /*************Ҏ的调?*********/  
     GetScore g=new GetScore();
     g.getScore(stuArr);  
}
}


希望q段代码能够对大家有所帮助Q谢谢各位的参观?br />



Soap MacTavish 2010-10-08 21:24 发表评论
]]>
վ֩ģ壺 ˮ| | | | | | | կ| | | | ƴ| | | ԭ| | ̨| ƺ| | Ͼ| | ƺ| Զ| Ϫ| Զ| | ½| Ů| | ɽ| | | ߷| | ɽ| Զ| | ƽɽ| մ| պ| |