﻿<?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-NeedJava-随笔分类-Java</title><link>http://www.blogjava.net/needjava/category/21490.html</link><description>You Need Java, Like World Need Sun.</description><language>zh-cn</language><lastBuildDate>Mon, 17 Sep 2007 18:08:12 GMT</lastBuildDate><pubDate>Mon, 17 Sep 2007 18:08:12 GMT</pubDate><ttl>60</ttl><item><title>〔Java〕〔Swing〕关闭前提醒</title><link>http://www.blogjava.net/needjava/archive/2007/09/17/146007.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Mon, 17 Sep 2007 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/17/146007.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/146007.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/17/146007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/146007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/146007.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">import java.awt.Toolkit;<br />import java.awt.Dimension;<br /><br />import java.awt.event.WindowEvent;<br />import java.awt.event.WindowAdapter;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">import javax.swing.JFrame;<br />import javax.swing.JOptionPane;</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 关闭前提醒<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modofied: 2005.04.02<br /> *<br /> ******************************************************************************/<br />class AlarmBeforeClosed extends JFrame<br />{<br />  public AlarmBeforeClosed( String title )<br />  {<br />    //设置程序标题栏<br />    this.setTitle( title );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //不给最大化<br />    this.setResizable( false );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //设置程序界面大小<br />    this.setSize( new Dimension( 500, 400 ) );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //将程序居中放置（方法1）<br />    Dimension paneSize=this.getSize();<br />    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();<br />    this.setLocation( ( screenSize.width-paneSize.width )/2, ( screenSize.height-paneSize.height )/2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //将程序居中放置（方法2）<br />    //this.setLocationRelativeTo( null );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //设置程序关闭的类型，防止关闭<br />    this.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //设置关闭程序<br />    this.addWindowListener( new WindowAdapter()<br />    {<br />      public void windowClosing( WindowEvent e )<br />      {<br />        closeApplication();<br />      }<br />    } );<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 关闭程序<br />   *<br />   ****************************************************************************/<br />  private void closeApplication()<br />  {<br />    Toolkit.getDefaultToolkit().beep();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int answer=JOptionPane.showConfirmDialog( AlarmBeforeClosed.this,<br />                                              "您真的要退出此系统？",<br />                                              "退出程序",<br />                                              JOptionPane.YES_NO_OPTION,<br />                                              JOptionPane.QUESTION_MESSAGE,<br />                                              null );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    if( answer==JOptionPane.YES_OPTION )  //选择“是”<br />      {<br />        System.exit( 0 );<br />      }<br />    else if( answer==JOptionPane.NO_OPTION )  //选择“否”<br />           {<br />             return;<br />           }<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 入口主程序<br />   *<br />   ****************************************************************************/<br />  public static void main( String[] args )<br />  {<br />    new AlarmBeforeClosed( "关闭前提醒" ).setVisible( true );<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/146007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-17 22:56 <a href="http://www.blogjava.net/needjava/archive/2007/09/17/146007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕乘除法和等效的位运算</title><link>http://www.blogjava.net/needjava/archive/2007/09/17/145706.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Mon, 17 Sep 2007 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/17/145706.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145706.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/17/145706.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145706.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 乘除法和等效的位运算<br /> *<br /> * 1024 = 2*2*2*2*2*2*2*2*2*2 = 100 0000 0000<br /> *<br /> ******************************************************************************/<br />class BitOperation<br />{<br />  public static void main( String[] args )<br />  {<br />    //被除数<br />    long dividend=182495073L;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    long temp=0L;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    long begin=0L;</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend/1024等效于dividend&gt;&gt;10<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend/1024;<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend&gt;&gt;10;<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒\r\n" );</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend*1024等效于dividend&lt;&lt;10<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend*1024;<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend&lt;&lt;10;<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒\r\n" );</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend%1024等效于dividend-( dividend&gt;&gt;10&lt;&lt;10 )<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend%1024;<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;10000000; i++ )<br />       {<br />         temp=dividend-( dividend&gt;&gt;10&lt;&lt;10 );<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+" 总共耗时："+( System.currentTimeMillis()-begin )+"毫秒\r\n" );<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/145706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-17 09:17 <a href="http://www.blogjava.net/needjava/archive/2007/09/17/145706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕用Integer.toString( 1000 )好于1000+""</title><link>http://www.blogjava.net/needjava/archive/2007/09/17/145665.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/17/145665.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145665.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/17/145665.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145665.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">我原来把数字变成字符串，使用""+1000，但是经过测试，发现，，，呵呵，你自己测试吧：<br /><br />public final class WhoFaster2<br />{<br />  public static void main( String[] args )<br />  {<br />    long times=1000000L;  //百万</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    long start=0L;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    String temp=null;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    /*/<br />    start=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    temp=null;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;times; i++ )<br />       {<br />         temp=times+"";<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+"　"+( System.currentTimeMillis()-start ) );<br />    /*/<br />    start=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    temp=null;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;times; i++ )<br />       {<br />         temp=Long.toString( times );<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( temp+"　"+( System.currentTimeMillis()-start ) );<br />    //*/<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/145665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-17 01:23 <a href="http://www.blogjava.net/needjava/archive/2007/09/17/145665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕看看谁读的快</title><link>http://www.blogjava.net/needjava/archive/2007/09/17/145663.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 17:02:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/17/145663.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145663.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/17/145663.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145663.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">刚刚写的看谁复制的快，只是由于在项目中犹豫到底是用哪个好而写的，没想到大家很感兴趣，那我再把读取文件谁快也翻上来，有错尽管拍砖。<br /><br />另外，最好能放在有上万张10KB以上的图片的文件夹下运行，否则不一定看出效果，我的是六千多张，10240轻松取胜。<br /><br />import java.io.File;<br />import java.io.IOException;<br />import java.io.FileInputStream;<br />import java.io.FileNotFoundException;</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2007.08.26<br /> *<br /> ******************************************************************************/<br />public final class ReadFaster<br />{<br />  /*****************************************************************************<br />   *<br />   * 构造函数，默认使用当前路径<br />   *<br />   ****************************************************************************/<br />  public ReadFaster()<br />  {<br />    this( "." );<br />  }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  public ReadFaster( String fileName )<br />  {<br />    this.listPictures( null, fileName );<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 列出当前目录下的文件列表，包括文件和文件夹<br />   *<br />   ****************************************************************************/<br />  private final void listPictures( File path, String fileName )<br />  {<br />    File file=new File( path, fileName );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    if( file.isDirectory() )<br />      {<br />        //得到当前目录下的文件列表，包括文件和文件夹<br />        String[] children=file.list();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">        //如果子集为空，就放弃后面的操作<br />        if( children==null )<br />          {<br />            return;<br />          }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">        //排序<br />        //java.util.Arrays.sort( children );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">        //如果子集不为空，则显示<br />        for( int i=0; i&lt;children.length; i++ )<br />           {<br />             listPictures( file, children[i] );<br />           }<br />      }<br />    else if( file.isFile() )<br />           {<br />             if( isPictureSuffix( file.getPath() ) )<br />               {<br />                 readPicture( file );<br />               }<br />           }<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 根据后缀名判断是否是有效的图片，并且返回小写的后缀名<br />   *<br />   ****************************************************************************/<br />  private final boolean isPictureSuffix( String fileName )<br />  {<br />    if( fileName==null )<br />      {<br />        return false;<br />      }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int length=fileName.length();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    //可能存在“.jpg”这样的文件，即4个字符<br />    if( length&gt;=4 )<br />      {<br />        char c=fileName.charAt( length-4 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">        if( c=='.' )<br />          {<br />            c=fileName.charAt( length-3 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">            if( c=='j'||c=='J' )<br />              {<br />                c=fileName.charAt( length-2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                if( c=='p'||c=='P' )<br />                  {<br />                    c=fileName.charAt( length-1 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                    if( c=='g'||c=='G' )<br />                      {<br />                        return true;<br />                      }<br />                    else if( c=='e'||c=='E' )<br />                           {<br />                             return true;<br />                           }<br />                  }<br />              }<br />            else if( c=='t'||c=='T' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                     if( c=='i'||c=='I' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                         if( c=='f'||c=='F' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }<br />          }<br />        else if( c=='j'||c=='J' )<br />               {<br />                 c=fileName.charAt( length-3 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                 if( c=='p'||c=='P' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                     if( c=='e'||c=='E' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                         if( c=='g'||c=='G' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }<br />                 else if( c=='f'||c=='F' )<br />                        {<br />                          c=fileName.charAt( length-2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                          if( c=='i'||c=='I' )<br />                            {<br />                              c=fileName.charAt( length-1 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                              if( c=='f'||c=='F' )<br />                                {<br />                                  return true;<br />                                }<br />                            }<br />                        }<br />               }<br />        else if( c=='t'||c=='T' )<br />               {<br />                 c=fileName.charAt( length-3 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                 if( c=='i'||c=='I' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                     if( c=='f'||c=='F' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                         if( c=='f'||c=='F' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">               }<br />      }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    return false;<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 大于10240的，每次读1024或2048<br />   *<br />   * 小于10240的，读10240一次即可<br />   *<br />   ****************************************************************************/<br />  private final String readPicture( File file )<br />  {<br />    try{ FileInputStream fis=new FileInputStream( file );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         //小于10K的忽略<br />         if( fis.available()&lt;10240 )<br />           {<br />             return "";<br />           }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         long num=0L;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         //Buffered的默认有2048和8192</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         //*/ No.1<br />         byte[] buffer=new byte[10240];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         if( fis.read( buffer )==10240 )<br />           {<br />             for( int i=0; i&lt;10240; i++ )<br />                {<br />                  num++;<br />                }<br />           }<br />         //*/</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         /*/ No.3<br />         byte[] buffer=new byte[5120];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         for( int j=0; j&lt;2; j++ )<br />            {<br />              if( fis.read( buffer )==5120 )<br />                {<br />                  for( int i=0; i&lt;5120; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         /*/ No.2<br />         byte[] buffer=new byte[2048];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         for( int j=0; j&lt;5; j++ )<br />            {<br />              if( fis.read( buffer )==2048 )<br />                {<br />                  for( int i=0; i&lt;2048; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         /*/ No.4<br />         byte[] buffer=new byte[1024];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         for( int j=0; j&lt;10; j++ )<br />            {<br />              if( fis.read( buffer )==1024 )<br />                {<br />                  for( int i=0; i&lt;1024; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         fis.close();<br />       }<br />     catch( FileNotFoundException fnfe )<br />          {<br />            fnfe.printStackTrace();<br />          }<br />     catch( IOException ioe )<br />          {<br />            ioe.printStackTrace();<br />          }<br />     catch( Exception e )<br />          {<br />            e.printStackTrace();<br />          }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">     return "";<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 主函数入口<br />   *<br />   ****************************************************************************/<br />  public static void main( String[] args )<br />  {<br />    try{ long begin=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         ReadFaster rf=new ReadFaster();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         System.out.println( "总共耗时："+( System.currentTimeMillis()-begin )+"毫秒\r\n" );<br />       }<br />    catch( Exception e )<br />         {<br />           e.printStackTrace();<br />         }<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/145663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-17 01:02 <a href="http://www.blogjava.net/needjava/archive/2007/09/17/145663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕中文变量</title><link>http://www.blogjava.net/needjava/archive/2007/09/16/145636.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/16/145636.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145636.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/16/145636.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145636.html</trackback:ping><description><![CDATA[
		<font face="Courier New">
				<font size="2">
						<font color="#808080">public class 终结者<br />{<br />  public static void main( String[] args )<br />  {<br />    for( int 终结者=1; 终结者&lt;=100; 终结者++ )<br />       {<br />         System.out.println( 终结者 );<br />       }<br />  }<br />} <br /><br /></font>
						<font color="#808080">注意，不是所有的中文都支持。 <br /><br />你是不是想到了混淆？？？这可不是易语言，呵呵。<br /><br /></font>
				</font>
		</font>
<img src ="http://www.blogjava.net/needjava/aggbug/145636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-16 21:42 <a href="http://www.blogjava.net/needjava/archive/2007/09/16/145636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕比较赋值与System.arraycopy谁快</title><link>http://www.blogjava.net/needjava/archive/2007/09/16/145513.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/16/145513.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145513.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/16/145513.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145513.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 比较赋值与System.arraycopy谁快<br /> *<br /> * 复制的内容越多，System.arraycopy优势更明显<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2007.09.16<br /> *<br /> ******************************************************************************/<br />public final class WhoFaster<br />{<br />  public static void main( String[] args )<br />  {<br />    /*/<br />    int begin=100;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int length=12;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    String temp="12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890";</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int times=10000000;  //千万<br />    /*/<br />    int begin=100;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int length=120;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    String temp="12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"黑客帝国忍者神龟变形金刚"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890"<br />               +"12345678901234567890";</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    int times=1000000;  //百万<br />    //*/</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    char[] oldArray=temp.toCharArray();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    char[] newArray=null;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    long start=0L;</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // 单纯赋值<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    newArray=new char[length];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    start=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;times; i++ )<br />       {<br />         for( int j=0; j&lt;length; j++ )<br />            {<br />              newArray[j]=oldArray[begin+j];<br />            }<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( new String( newArray )+"　"+( System.currentTimeMillis()-start ) );</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // System.arraycopy<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    newArray=new char[length];</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    start=System.currentTimeMillis();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;times; i++ )<br />       {<br />         System.arraycopy( oldArray, begin, newArray, 0, length );<br />       }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    System.out.println( new String( newArray )+"　"+( System.currentTimeMillis()-start ) );<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/145513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-16 13:42 <a href="http://www.blogjava.net/needjava/archive/2007/09/16/145513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕对数字或文件名排列</title><link>http://www.blogjava.net/needjava/archive/2007/09/14/145003.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Thu, 13 Sep 2007 16:17:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/14/145003.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/145003.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/14/145003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/145003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/145003.html</trackback:ping><description><![CDATA[
		<div width="1200">
				<p>
						<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 对数字或文件名排列<br /> *<br /> * 没有考虑汉字显示时占两个位置的情况，即对文件名处理不太好<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2007.09.09<br /> *<br /> ******************************************************************************/</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">public final class DotAlign<br />{<br />  private DotAlign(){}</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">  private static final String align( String string,<br />                                     char prefix,<br />                                     char suffix,<br />                                     int prefixLength,<br />                                     int suffixLength,<br />                                     boolean isNumber )<br />  {<br />    if( string==null||string.equals( "" )||string.equals( "." )||prefixLength&lt;0||suffixLength&lt;0 )<br />      {<br />        return string;<br />      }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    //如果没有小数，那么按照常理，小数点也应该省略<br />    char[] buffer=new char[( suffixLength&gt;0 ? prefixLength+1+suffixLength : prefixLength )];</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    int stringLength=string.length();</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    int dot=stringLength-1;</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    //找到小数点位置，可以用lastIndexOf()代替<br />    while( dot&gt;-1 )<br />         {<br />           if( string.charAt( dot-- )=='.' )<br />             {<br />               dot++;</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">               break;<br />             }<br />         }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    //System.out.print( Integer.toString( dot )+"\t" );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    //★整数部分，从小数点左位向左移<br />    int pointer=( dot&gt;-1 ? dot-1 : stringLength-1 );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    for( int i=prefixLength-1; i&gt;-1; i-- )<br />       {<br />         if( pointer&gt;-1 )<br />           {<br />             buffer[i]=string.charAt( pointer-- );<br />           }<br />         else{ buffer[i]=prefix;<br />             }<br />       }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    //如果没有小数部分，那么按照常理，小数点应该省略<br />    if( suffixLength&gt;0 )<br />      {<br />        //★小数点<br />        buffer[prefixLength]=( dot&gt;-1||isNumber ? '.' : suffix );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">        //★小数部分，从小数点右位向右移<br />        pointer=( dot&gt;-1 ? dot+1 : stringLength );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">        for( int i=prefixLength+1; i&lt;buffer.length; i++ )<br />           {<br />             if( pointer&lt;stringLength )<br />               {<br />                 buffer[i]=string.charAt( pointer++ );<br />               }<br />             else{ buffer[i]=suffix;<br />                 }<br />           }<br />      }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    return new String( buffer );<br />  }</font>
				</p>
				<p>
						<br />
						<font face="Courier New" color="#808080" size="2">  public final static void main( String[] args )<br />  {<br />    System.out.println( "\r\n-------------------------------------------\r\n" );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    String[] number={ "",<br />                      ".",<br />                      ".5",<br />                      ".56",<br />                      ".567",<br />                      ".5678",<br />                      "1234",<br />                      "1234.",<br />                      "1234.5",<br />                      "1234.56",<br />                      "1234.567",<br />                      "1234.5678" };</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;number.length; i++ )<br />       {<br />         System.out.println( "["+DotAlign.align( number[i], ' ', '0', 7, 2, true )+"]   ["+number[i]+"]" );<br />       }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    System.out.println( "\r\n-------------------------------------------\r\n" );</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    String[] file={ "",<br />                    ".",<br />                    ".j",<br />                    ".jp",<br />                    ".jpe",<br />                    ".jpeg",<br />                    "1234",<br />                    "1234.",<br />                    "1234.j",<br />                    "1234.jp",<br />                    "1234.jpe",<br />                    "1234.jpeg" };</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    for( int i=0; i&lt;file.length; i++ )<br />       {<br />         System.out.println( "["+DotAlign.align( file[i], ' ', ' ', 7, 5, false )+"]   ["+file[i]+"]" );<br />       }</font>
				</p>
				<p>
						<font face="Courier New" color="#808080" size="2">    System.out.println( "\r\n-------------------------------------------\r\n" );<br />  }<br />}</font>
				</p>
		</div>
<img src ="http://www.blogjava.net/needjava/aggbug/145003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-14 00:17 <a href="http://www.blogjava.net/needjava/archive/2007/09/14/145003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕〔SWT〕分析RSSOwl如何做到只运行一个实例，并且可以激活</title><link>http://www.blogjava.net/needjava/archive/2007/09/01/141959.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sat, 01 Sep 2007 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/09/01/141959.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/141959.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/09/01/141959.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/141959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/141959.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">前几天自己发表的只运行一个实例的文章，感谢Pande的留意，并提出宝贵意见，他推荐的正好是我想找的RSSOwl源码，以下是我分析RSSOwl如何做到只运行一个实例并且激活的，如有错误，请拍砖。<br /></font>
				<a href="http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/RSSOwlLoader.java">
						<br />
				</a>
		</p>
		<p>
				<a href="http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/RSSOwlLoader.java">
						<font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/RSSOwlLoader.java</font>
				</a>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">根据 RSSOwlLoader.java 中的</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">[code]<br />private static void startupProcess( String[] args )<br />{ <br />  ...</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  if( !System.getProperties().containsKey( PROPERTY_ALLOW_MULTI_INSTANCES )&amp;&amp;<font color="#ff0000">StartupManager.isRSSOwlRunning( feedArgument )</font> )</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  ...</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">}<br />[/code]</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">追踪到 StartupManager.java 见下：</font>
		</p>
		<p>
				<a href="http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/thread/StartupManager.java">
						<font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/thread/StartupManager.java</font>
				</a>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">追踪到 StartupManager.isRSSOwlRunning( String message ) 用途为建立ServerSocket，监听本地8794端口</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">[code]<br />static ServerSocket applLockSocket;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">public static boolean isRSSOwlRunning( String message )<br />{ </font>
		</p>
		<p>
				<font face="Courier New" color="#ff0000" size="2">  try{ applLockSocket=new ServerSocket( 8794, 50, InetAddress.getByName( "127.0.0.1" ) );  //1987年9月4日出生？</font>
		</p>
		<p>
				<font face="Courier New" color="#ff0000" size="2">       handleSocketUnBound();  //</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">
						<font color="#ff0000">       return false;<br /></font>     } <br />  catch( java.net.BindException e )    //Another instance already running<br />       { <br />         ...</font>
		</p>
		<p>
				<font face="Courier New" color="#ff0000" size="2">         handleSocketBound( message );  //</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">
						<font color="#ff0000">         return true;<br /></font>       }  <br />  catch( IOException e )  //Other Error<br />       { <br />         ...</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         return false;<br />       }<br />} <br />[/code]</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">追踪到 StartupManager.handleSocketUnBound() 和 StartupManager.handleSocketBound( String message )</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">[code]<br />private static void handleSocketBound( String message )<br />{<br />  Socket socket;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  try{ socket=new Socket( InetAddress.getByName( "127.0.0.1" ), 8794 );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">       PrintWriter writer=new PrintWriter( new OutputStreamWriter( socket.getOutputStream() ) );</font>
		</p>
		<p>
				<font face="Courier New" color="#ff0000" size="2">       writer.println( ( message!=null&amp;&amp;message.length()&gt;0 ) ? message : DEFAULT_MESSAGE );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">       writer.flush();<br />     }<br />  catch( UnknownHostException e )<br />       {<br />         ...<br />       }<br />  catch( IOException e )<br />       {<br />         ...<br />       }<br />}<br />[/code]<br /><br />[code]<br /></font>
				<font face="Courier New" color="#808080" size="2">/**<br /> * Server not yet running. Start it and listen for incoming messages.<br /> */<br />private static void handleSocketUnBound()<br />{<br />  listen();  //转向，为了对称好看？还是为了兼容？<br />}<br /><br /></font>
				<font face="Courier New" color="#808080" size="2">/**<br /> * Listen for incoming messages.看看接受的连接发送了什么内容<br /> */<br />private static void listen()<br />{<br />  //Run the Server inside a Thread<br />  server=new ExtendedThread()  //extends from Thread<br />  {<br />    public void run()<br />    {<br />      while( !isStopped()&amp;&amp;!isInterrupted() )<br />           {<br />             BufferedReader buffReader=null;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">             try{ //Read a single line from the Socket<br />                  Socket socket=applLockSocket.accept();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                  buffReader=new BufferedReader( new InputStreamReader( socket.getInputStream() ) );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                  final String message=buffReader.readLine();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                  socket.close();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                  //Check the received message<br /><font color="#ff0000">                  if( ( message!=null&amp;&amp;message.length()&gt;0 )&amp;&amp;GUI.display!=null&amp;&amp;!GUI.display.isDisposed() )  //激活某个GUI的代码在此，我们进去看看<br /></font>                    {<br />                      GUI.display.asyncExec( new Runnable()<br />                      {<br />                        public void run()<br />                        {<br />                          //Restore the RSSOwl Window and handle Message<br />                          if( GUI.isAlive() )<br />                            {<br /><font color="#ff0000">                              GUI.rssOwlGui.restoreWindow();  //找到了，转到GUI.java</font></font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                              //Handle the message as Link if valid argument<br />                              if( RSSOwlLoader.isValidArgument( message ) )<br />                                {<br />                                  GUI.rssOwlGui.getEventManager().actionHandleSuppliedLink( message );<br />                                }<br />                            }<br />                        }<br />                      } );<br />                    }<br />                }<br />             catch( IOException e )<br />                  {<br />                    ...<br />                  }<br />             finally{ //关闭流<br />                    }<br />           }<br />    }<br />  };</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  server.setDaemon( true );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  server.setName( "Startup Manager Thread" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">  server.start();<br />}<br />[/code]</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">追踪到 GUI.java 见下：</font>
		</p>
		<p>
				<a href="http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/GUI.java">
						<font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/GUI.java</font>
				</a>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">追踪到GUI.restoreWindow()</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">[code]<br />/**<br /> * Restore the application window either from taskbar or the tray.<br /> */<br />public void restoreWindow()<br />{<br />  //RSSOwl is minimized to Tray<br />  if( GlobalSettings.useSystemTray()&amp;&amp;rssOwlSystray!=null&amp;&amp;rssOwlSystray.isMinimizedToTray() )<br />    {<br />      rssOwlSystray.restoreWindow();<br />    }<br />  else{ //RSSOwl is not active<br /><font color="#ff0000">        shell.forceActive();  //就是它了</font></font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">        shell.setMinimized( false );<br />      }<br />}<br />[/code]</font>
		</p>
		<p>
				<font size="2">
						<font face="Courier New" color="#808080">原理如下： <br /><br /><font color="#808080">在本地8794端口建立服务监听，并且一直监听此端口，试图接受此端口其它实例（其它程序？）发送的输入 <br /><br />如果读到数据（好像没有判断数据的合法性，仅仅判断数据不为空），并且自己不是“激活”状态，就“激活”自己； <br /><br />如果建立服务监听不成功，说明已经有实例（其它程序？）占用此端口了，向此端口发送数据唤醒前一个实例，停几秒以便前一个实例接受，然后退出。 <br /><br />程序用的是SWT，激活方法用的是shell.forceActive()，but it's not good for core java. <br /><br />以上分析如有不对，恳请斧正。</font></font>
						<font color="#808080">
						</font>
				</font>
		</p>
		<p>
				<br />
				<br />
				<font face="Courier New" color="#808080" size="2">  </font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/141959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-09-01 17:03 <a href="http://www.blogjava.net/needjava/archive/2007/09/01/141959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕只运行一个实例（使用System.setErr()重定向）</title><link>http://www.blogjava.net/needjava/archive/2007/08/29/141106.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Wed, 29 Aug 2007 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/08/29/141106.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/141106.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/08/29/141106.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/141106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/141106.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New">
						<font color="#808080" size="2">如何只运行一个实例，网上有三种方法（单模式不算）：<br /><br />1、占用端口（有效，但是有端口被挪用的缺陷）<br /><br />2、检查文件是否存在（有效，但突然停机可能有问题）<br /><br />3、使用JNI（有效，但丧失可移植性）<br /><br />我写的和第二个原理差不多，判断某个文件是否被占用，并且我把记录日志、保存日志、判断是否运行放在一起。<br /><br />你可以转载本Blog，但是不能篡改作者名称。<br /></font>
				</font>
				<font face="Courier New">
						<font color="#808080" size="2">
								<br />import java.awt.event.WindowEvent;<br />import java.awt.event.WindowAdapter;</font>
				</font>
		</p>
		<p>
				<font face="Courier New">
						<font color="#808080" size="2">import java.io.File;<br />import java.io.IOException;<br />import java.io.PrintStream;<br />import java.io.FileOutputStream;<br />import java.io.FileNotFoundException;</font>
				</font>
		</p>
		<p>
				<font face="Courier New">
						<font color="#808080" size="2">import javax.swing.JFrame;</font>
				</font>
		</p>
		<font face="Courier New">
				<font color="#808080" size="2">
						<p>
								<br />/*******************************************************************************<br /> *<br /> * 只运行一个实例<br /> *<br /> * Just single instance<br /> *<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2007.08.29<br /> *<br /> *<br /> * 你可以使用此程序于任何地方，但请保留程序作者及注释的完整。如果你改进了程序，<br /> *<br /> * 请在原作者后添加姓名，如：Author: NeedJava/Jack/Mike，版本及修改时间同理。<br /> *<br /> ******************************************************************************/<br />public final class SingleInstance<br />{<br />  /*****************************************************************************<br />   *<br />   * 构造函数<br />   *<br />   ****************************************************************************/<br />  private SingleInstance()<br />  {<br />    this( "vab", ".vab", "vab" );<br />  }</p>
						<p>
								<br />  public SingleInstance( String filePrefixName, String fileSuffixName, String directoryName )<br />  {<br />    this.init( filePrefixName, fileSuffixName, directoryName );<br />  }</p>
						<p>
								<br />  /*****************************************************************************<br />   *<br />   * 原理：<br />   *<br />   * 用重定向将标准错误输出流定向到一个日志文件，占用它，使其不能被删除<br />   *<br />   * 以后的实例试图将存在的此日志文件改名并且另存为某个文件夹下<br />   *<br />   * 如果成功，说明没有程序占用它（不排除你在用它，缺陷？），正好保存日志<br />   *<br />   * 如果不成功，退出、renameTo命令有一箭双雕的作用<br />   *<br />   ****************************************************************************/<br />  private final void init( String filePrefixName, String fileSuffixName, String directoryName )<br />  {<br />    if( filePrefixName==null||fileSuffixName==null||directoryName==null )<br />      {<br />        exitWithWarning( "Error: Invalid file name.", 10 );<br />      }</p>
						<p>    //We need check the fileSuffixName here? From the tail?</p>
						<p>    String fileName=filePrefixName+fileSuffixName;</p>
						<p>    try{ File error=new File( fileName );</p>
						<p>         if( error.exists() )<br />           {<br />             File directory=new File( directoryName );</p>
						<p>             String newFileName=directoryName+File.separator+convertMillisecond2DateTime( error.lastModified() )+fileSuffixName;</p>
						<p>             //System.out.println( newFileName );</p>
						<p>             if( directory.exists() )<br />               {<br />                 if( directory.isDirectory() )<br />                   {<br />                     //renameTo也是好东东，既可以改名，还可以移文件<br />                     if( !error.renameTo( new File( newFileName ) ) )<br />                       {<br />                         exitWithWarning( "Error: The instance already exists, I will exit.", 11 );<br />                       }<br />                   }<br />                 else{ exitWithWarning( "Error: The \'"+directoryName+"\' is not a valid directory.", 21 );<br />                     }<br />               }<br />             else{ if( directory.mkdirs() )<br />                     {<br />                       //renameTo也是好东东，既可以改名，还可以移文件<br />                       if( !error.renameTo( new File( newFileName ) ) )<br />                         {<br />                           exitWithWarning( "Error: The instance already exists, I will exit.", 11 );<br />                         }<br />                     }<br />                   else{ exitWithWarning( "Error: Failed to create the \'"+directoryName+"\' directory.", 22 );<br />                       }<br />                 }<br />           }</p>
						<p>         //重定向标准错误输出流，所有功能全靠它。来，啵一个<br />         System.setErr( new PrintStream( new FileOutputStream( fileName ) ) );<br />       }<br />    catch( FileNotFoundException fnfe )<br />         {<br />           //fnfe.printStackTrace();</p>
						<p>           exitWithWarning( fnfe.toString(), 23 );<br />         }<br />    catch( IOException ioe )<br />         {<br />           //ioe.printStackTrace();</p>
						<p>           exitWithWarning( ioe.toString(), 29 );<br />         }<br />    catch( Exception e )<br />         {<br />           //e.printStackTrace();</p>
						<p>           exitWithWarning( e.toString(), 99 );<br />         }<br />  }</p>
						<p>
								<br />  /*****************************************************************************<br />   *<br />   * You can change the milliseconds to the date and time string here<br />   *<br />   * I just return the original<br />   *<br />   * Don't get the same string :)<br />   *<br />   ****************************************************************************/<br />  private final String convertMillisecond2DateTime( long millisecond )<br />  {<br />    return ""+millisecond;<br />  }</p>
						<p>
								<br />  /*****************************************************************************<br />   *<br />   * Return the warning and the exit code, then exit the application<br />   *<br />   ****************************************************************************/<br />  private final void exitWithWarning( String warning, int code )<br />  {<br />    System.out.println( warning==null ? "" : warning );</p>
						<p>    System.exit( code );<br />  }</p>
						<p>
								<br />  /*****************************************************************************<br />   *<br />   * 主函数入口<br />   *<br />   ****************************************************************************/<br />  public final static void main( String[] args )<br />  {<br />    SingleInstance si=new SingleInstance( "error", ".txt", "error" );</p>
						<p>    final JFrame frame=new JFrame( "Just single instance. By NeedJava. 2007.08.29" );</p>
						<p>    //I stay here, to make some friends happy.<br />    frame.addWindowListener( new WindowAdapter()<br />    {<br />      public void windowClosing( WindowEvent we )<br />      {<br />        frame.dispose();</p>
						<p>        System.exit( 0 );<br />      }<br />    } );</p>
						<p>    frame.setBounds( 200, 200, 700, 70 );</p>
						<p>    frame.setVisible( true );<br />  }<br />}<br /></p>
				</font>
		</font>
<img src ="http://www.blogjava.net/needjava/aggbug/141106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-08-29 22:11 <a href="http://www.blogjava.net/needjava/archive/2007/08/29/141106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕待选框Swing</title><link>http://www.blogjava.net/needjava/archive/2007/07/08/128927.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 08 Jul 2007 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/07/08/128927.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/128927.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/07/08/128927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/128927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/128927.html</trackback:ping><description><![CDATA[
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import java.awt.Font;<br />import java.awt.Color;<br />import java.awt.Toolkit;<br />import java.awt.Component;<br />import java.awt.Dimension;<br />import java.awt.BorderLayout;<br />import java.awt.event.MouseEvent;<br />import java.awt.event.MouseAdapter;<br />import java.awt.event.WindowEvent;<br />import java.awt.event.WindowAdapter;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import java.util.ArrayList;<br />import java.util.Enumeration;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import javax.swing.JFrame;<br />import javax.swing.JLabel;<br />import javax.swing.JPanel;<br />import javax.swing.JTable;<br />import javax.swing.JComboBox;<br />import javax.swing.UIManager;<br />import javax.swing.JSplitPane;<br />import javax.swing.JOptionPane;<br />import javax.swing.JScrollPane;<br />import javax.swing.DefaultComboBoxModel;<br />import javax.swing.table.JTableHeader;<br />import javax.swing.table.DefaultTableModel;<br />import javax.swing.table.TableCellRenderer;<br />import javax.swing.table.AbstractTableModel;<br />import javax.swing.table.DefaultTableCellRenderer;<br />import javax.swing.border.EtchedBorder;<br />import javax.swing.border.TitledBorder;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/*********************************************************************<br /> *<br /> *<br /> * TableChooser.java<br /> *<br /> * Last modified: 2005-04-26<br /> *<br /> * Author: NeedJava<br /> *<br /> * E-Mail: </font>
				<a href="mailto:needjava@126.com">
						<font color="#808080" size="2">needjava@126.com</font>
				</a>
				<br />
				<font color="#808080" size="2"> *<br /> * Address: HeFei-AnHui-China<br /> *<br /> * Bug: 如果选中行头拖动，会发现表体不会跟着拖动，除非你拖动表体<br /> *<br /> * If you fixed this bug, please let us know, Thanks a lot.<br /> *<br /> *<br /> *********************************************************************/<br />class TableChooser extends JFrame<br />{<br />  private final boolean horizontal;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private String[] tableTitle;<br />  private ArrayList primaryBody;<br />  private ArrayList prepareBody;<br />  private ArrayList selectBody;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private ShowTableModel prepareModel;<br />  private ShowTableModel selectModel;<br />  private final RowHeaderModel prepareRowHeaderModel;<br />  private final RowHeaderModel selectRowHeaderModel;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private final JTable prepareTable;<br />  private final JTable selectTable;<br />  private final JTable prepareRowHeaderTable;<br />  private final JTable selectRowHeaderTable;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private final static int rowHeight=18;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private final JScrollPane prepareTableJSP;<br />  private final JScrollPane selectTableJSP;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private final JPanel prepareTablePanel;<br />  private final JPanel selectTablePanel;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private final JSplitPane splitPane;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">  /**<br />   *<br />   * 构造函数<br />   *<br />   */<br />  public TableChooser( boolean horizontal )<br />  {<br />    this.horizontal=horizontal;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设置程序标题栏<br />    this.setTitle( "选择框" );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //不给最大化<br />    //this.setResizable( false );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设置程序界面大小<br />    this.setSize( new Dimension( 500, 400 ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //将程序居中放置（方法1）<br />    Dimension paneSize=this.getSize();<br />    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();<br />    this.setLocation( ( screenSize.width-paneSize.width )/2, ( screenSize.height-paneSize.height )/2 );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //将程序居中放置（方法2）<br />    //this.setLocationRelativeTo( null );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设置程序关闭的类型，防止关闭<br />    this.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设置关闭程序<br />    this.addWindowListener( new WindowAdapter()<br />    {<br />      public void windowClosing( WindowEvent e )<br />      {<br />        closeApplication();<br />      }<br />    } );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //////////////////////////////<br />    prepareTable=new JTable();<br />    selectTable=new JTable();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //为待选、已选表格设置预设的绘制器<br />    ShowTableRenderer ShowTableRenderer=new ShowTableRenderer();<br />    prepareTable.setDefaultRenderer( Object.class, ShowTableRenderer );<br />    selectTable.setDefaultRenderer( Object.class, ShowTableRenderer );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //设置是否可以拖动表头<br />    prepareTable.getTableHeader().setReorderingAllowed( false );<br />    selectTable.getTableHeader().setReorderingAllowed( false );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //设置行高<br />    prepareTable.setRowHeight( rowHeight );<br />    selectTable.setRowHeight( rowHeight );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //////////////////////////////<br />    prepareRowHeaderModel=new RowHeaderModel( 0, 1 );<br />    selectRowHeaderModel=new RowHeaderModel( 0, 1 );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    prepareRowHeaderTable=new JTable( prepareRowHeaderModel );<br />    selectRowHeaderTable=new JTable( selectRowHeaderModel );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //为rowHeaderTable设置预设的绘制器<br />    prepareRowHeaderTable.setDefaultRenderer( Object.class, new RowHeaderRenderer( prepareTable ) );<br />    selectRowHeaderTable.setDefaultRenderer( Object.class, new RowHeaderRenderer( selectTable ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //将rowHeaderTable固定宽度<br />    prepareRowHeaderTable.setPreferredScrollableViewportSize( new Dimension( 50, 0 ) );<br />    selectRowHeaderTable.setPreferredScrollableViewportSize( new Dimension( 50, 0 ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //设置行高<br />    prepareRowHeaderTable.setRowHeight( rowHeight );<br />    selectRowHeaderTable.setRowHeight( rowHeight );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //防止单元格有缝隙<br />    prepareRowHeaderTable.setIntercellSpacing( new Dimension( 0, 0 ) );<br />    selectRowHeaderTable.setIntercellSpacing( new Dimension( 0, 0 ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //共用同一个ListSelectionModel，使两边的某行同时选中<br />    prepareRowHeaderTable.setSelectionModel( prepareTable.getSelectionModel() );<br />    selectRowHeaderTable.setSelectionModel( selectTable.getSelectionModel() );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //////////////////////////////<br />    prepareTableJSP=new JScrollPane( prepareTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );<br />    selectTableJSP=new JScrollPane( selectTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //将rowHeaderTable作为row header加入JScrollPane的RowHeaderView区域<br />    prepareTableJSP.setRowHeaderView( prepareRowHeaderTable );<br />    selectTableJSP.setRowHeaderView( selectRowHeaderTable );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //左上角修饰<br />    prepareTableJSP.setCorner( JScrollPane.UPPER_LEFT_CORNER, new RowHeaderCorner( prepareTable, "全选" ) );<br />    selectTableJSP.setCorner( JScrollPane.UPPER_LEFT_CORNER, new RowHeaderCorner( selectTable, "全选" ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //////////////////////////////<br />    prepareTablePanel=new JPanel();<br />    selectTablePanel=new JPanel();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    prepareTablePanel.setLayout( new BorderLayout() );<br />    selectTablePanel.setLayout( new BorderLayout() );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    prepareTablePanel.add( prepareTableJSP, BorderLayout.CENTER );<br />    selectTablePanel.add( selectTableJSP, BorderLayout.CENTER );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    prepareTablePanel.setBorder( new TitledBorder( new EtchedBorder( EtchedBorder.LOWERED ), "待选人员" ) );<br />    selectTablePanel.setBorder( new TitledBorder( new EtchedBorder( EtchedBorder.LOWERED ), "已选人员" ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //至少显示6行<br />    prepareTablePanel.setMinimumSize( new Dimension( 200, 150 ) );<br />    selectTablePanel.setMinimumSize( new Dimension( 200, 150 ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //////////////////////////////<br />    if( horizontal )<br />      {<br />        splitPane=new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, prepareTablePanel, selectTablePanel );<br />      }<br />    else{ splitPane=new JSplitPane( JSplitPane.VERTICAL_SPLIT, prepareTablePanel, selectTablePanel );<br />        }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    //拖动时显示窗口，否则只显示拖动的边框<br />    splitPane.setContinuousLayout( true );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //可以点三角形图标只显示一个区域<br />    splitPane.setOneTouchExpandable( true );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    splitPane.setDividerLocation( 210 );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //放好主要面板<br />    this.getContentPane().add( splitPane, BorderLayout.CENTER );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    getTableModel();<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  /**<br />   *<br />   * 得到原始的TableModel<br />   *<br />   */<br />  private final void getTableModel()<br />  {<br />    tableTitle=new String[]{ "是否选择", "标号" };<br />    primaryBody=new ArrayList();<br />    prepareBody=new ArrayList();<br />    selectBody=new ArrayList();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    for( int i=1; i&lt;21; i++ )<br />       {<br />         Object[] row=new Object[2];</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         row[0]=Boolean.FALSE;  //第一列为判断用的布尔值，也可new Boolean( false )</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         row[1]=new Double( i );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         primaryBody.add( row );  //一行搞好后，增加进ArrayList中<br />         prepareBody.add( row );  //将待选内容初始为原始表格<br />       }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////<br />    //<br />    // 将数据根据需求切分<br />    //<br />    ////////////////////////////////////////////////////////////////////////<br />    prepareModel=new ShowTableModel( prepareBody, tableTitle )<br />    {<br />      public void setValueAt( Object value, int row, int col )<br />      {<br />        super.setValueAt( value, row, col );  //需要让父来赋值</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        Object rowObj = prepareBody.get( row );        //得到主表的那行内容<br />        int whichRow  = selectBody.indexOf( rowObj );  //查找次表有没有相同的那行记录</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        if( this.getValueAt( row, col ).equals( Boolean.TRUE ) )  //如果此行记录的首列内容为选择<br />          {<br />            if( whichRow&lt;0 )  //防止次表多次增加那行内容<br />              {<br />                selectBody.add( rowObj );<br />              }<br />          }<br />        else{ if( whichRow&gt;=0 )<br />                {<br />                  selectBody.remove( whichRow );  //如果首列为取消选择，那么次表删除那行记录<br />                }<br />            }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        this.fireTableDataChanged();         //通告主表结构变化<br />        selectModel.fireTableDataChanged();  //通告次表结构变化</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着次表行数变化<br />      }<br />    };<br />    prepareTable.setModel( prepareModel );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">    selectModel=new ShowTableModel( selectBody, tableTitle )<br />    {<br />      public void setValueAt( Object value, int row, int col )<br />      {<br />        super.setValueAt( value, row, col );  //需要让父来赋值</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        if( this.getValueAt( row, col ).equals( Boolean.FALSE ) )<br />          {<br />            selectBody.remove( row );<br />          }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        prepareModel.fireTableDataChanged();  //通告主表结构变化<br />        this.fireTableDataChanged();          //通告次表结构变化</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">        selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着次表行数变化<br />      }<br />    };<br />    selectTable.setModel( selectModel );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    prepareRowHeaderModel.setRowCount( prepareBody.size() );<br />    selectRowHeaderModel.setRowCount( selectBody.size() );<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  /**<br />   *<br />   * 取消所有选择的人员<br />   *<br />   */<br />  private final void deselectAll()<br />  {<br />    for( int i=0; i&lt;selectBody.size(); i++ )<br />       {<br />         ( (Object[])selectBody.get( i ) )[0]=Boolean.FALSE;  //将所有选择的行的第一列设为false<br />       }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    selectBody.clear();  //删除已经选择的内容</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    prepareModel.fireTableDataChanged();  //通告主表结构变化<br />    selectModel.fireTableDataChanged();   //通告次表结构变化</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着次表行数变化<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  /**<br />   *<br />   * 关闭程序<br />   *<br />   *<br />   */<br />  private void closeApplication()<br />  {<br />    Toolkit.getDefaultToolkit().beep();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    int answer=JOptionPane.showConfirmDialog( TableChooser.this, "您真的要退出此系统？", "退出程序", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    if( answer==JOptionPane.YES_OPTION )  //选择“是”<br />      {<br />        System.exit( 0 );<br />      }<br />    else if( answer==JOptionPane.NO_OPTION )  //选择“否”<br />           {<br />             return;<br />           }<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">  /**<br />   *<br />   * 入口主程序<br />   *<br />   */<br />//*/////////////////////////////////////////////////////////////////////////////<br />  public static void main( String args[] )<br />  {<br />    //改变GUI字体<br />    Font font=new Font( "宋体", Font.PLAIN, 12 );<br />    Enumeration keys=UIManager.getLookAndFeelDefaults().keys();<br />    while( keys.hasMoreElements() )<br />         {<br />           Object key=keys.nextElement();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">           if( UIManager.get( key ) instanceof Font )<br />             {<br />               UIManager.put( key, font );<br />             }<br />         }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //改变ComboBox背景色<br />    UIManager.put( "ComboBox.foreground", Color.black );<br />    UIManager.put( "ComboBox.background", Color.white );<br />    UIManager.put( "ComboBox.disabledForeground", Color.gray );<br />    UIManager.put( "ComboBox.disabledBackground", Color.white );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    UIManager.put( "Viewport.background", Color.white );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //new TableChooser( true ).setVisible( true );<br />    new TableChooser( false ).setVisible( true );<br />  }<br />//*/////////////////////////////////////////////////////////////////////////////<br />}</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/***********************************************************<br /> *<br /> * 待选、已选表格行头用的渲染器Renderer<br /> *<br /> **********************************************************/<br />class RowHeaderRenderer extends JLabel implements TableCellRenderer<br />{<br />  private JTable refTable;<br />  private JTableHeader header;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private Color headerForeground;<br />  private Color headerBackground;<br />  private Font headerFont;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public RowHeaderRenderer( JTable refTable )<br />  {<br />    this.refTable=refTable;<br />    this.header=refTable.getTableHeader();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    this.headerForeground=header.getForeground();<br />    this.headerBackground=header.getBackground();<br />    this.headerFont=header.getFont();<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public Component getTableCellRendererComponent( JTable table,<br />                                                  Object obj,<br />                                                  boolean isSelected,<br />                                                  boolean hasFocus,<br />                                                  int row,<br />                                                  int col )<br />  {<br />    this.setOpaque( true );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设为TableHeader的边框类型<br />    this.setBorder( UIManager.getBorder( "TableHeader.cellBorder" ) );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //居中显示文字<br />    this.setHorizontalAlignment( CENTER );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    //设置背景色为TableHeader的背景色<br />    this.setBackground( headerBackground );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    if( isSelected )<br />      {<br />        //当选取单元格时,在row header上设置成选取颜色<br />        this.setForeground( Color.white );<br />        this.setBackground( UIManager.getColor( "ScrollBar.thumbShadow" ) );<br />        this.setFont( headerFont );<br />        this.setText( String.valueOf( row+1 )+"*" );    //显示行数<br />      }<br />    else{ this.setForeground( headerForeground );<br />          this.setFont( headerFont );<br />          this.setText( String.valueOf( row+1 ) );    //显示行数<br />        }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    return this;<br />  }<br />}</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/***********************************************************<br /> *<br /> * 待选、已选表格行头用的Model<br /> *<br /> **********************************************************/<br />class RowHeaderModel extends DefaultTableModel<br />{<br />  RowHeaderModel( int row, int col )<br />  {<br />    super( row, col );<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public boolean isCellEditable( int row, int col )<br />  {<br />    return false;  //整个行头不给编辑<br />  }<br />}</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/***********************************************************<br /> *<br /> * 待选、已选表格左上角Corner<br /> *<br /> **********************************************************/<br />class RowHeaderCorner extends JLabel<br />{<br />  private JTable table;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  RowHeaderCorner( JTable table, String title )<br />  {<br />    super( title, JLabel.CENTER );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    this.table=table;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    this.addMouseListener( new MouseAdapter()<br />    {<br />      public void mousePressed( MouseEvent e )<br />      {<br />        tableSelectAll();<br />      }<br />    } );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    this.setBorder( UIManager.getBorder( "TableHeader.cellBorder" ) );<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  private void tableSelectAll()<br />  {<br />    table.selectAll();<br />  }<br />}</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/***********************************************************<br /> *<br /> * 待选、已选表格用的渲染器Renderer<br /> *<br /> **********************************************************/<br />class ShowTableRenderer extends DefaultTableCellRenderer<br />{<br />  public Component getTableCellRendererComponent( JTable table,<br />                                                  Object obj,<br />                                                  boolean isSelected,<br />                                                  boolean hasFocus,<br />                                                  int row,<br />                                                  int col )<br />  {<br />    super.getTableCellRendererComponent( table,<br />                                         obj,<br />                                         isSelected,<br />                                         hasFocus,<br />                                         row,<br />                                         col );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    this.setHorizontalAlignment( JLabel.CENTER );  //居中显示文字</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    return this;<br />  }<br />}</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">
				</font> </p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">/***********************************************************<br /> *<br /> * 待选、已选表格用的Model<br /> *<br /> **********************************************************/<br />class ShowTableModel extends AbstractTableModel<br />{<br />  private ArrayList tableBody;<br />  private String[] tableTitle;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  ShowTableModel( ArrayList body, String[] title )<br />  {<br />    this.tableBody  = body;<br />    this.tableTitle = title;<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public Object getValueAt( int row, int col )<br />  {<br />    if( row&gt;=0&amp;&amp;row&lt;tableBody.size()&amp;&amp;col&gt;=0&amp;&amp;col&lt;tableTitle.length )  //控制很严<br />      {<br />        return ( (Object[])tableBody.get( row ) )[col];<br />      }<br />    else{ return null;<br />        }<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public void setValueAt( Object value, int row, int col )<br />  {<br />    ( (Object[])tableBody.get( row ) )[col]=value;<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public int getColumnCount()<br />  {<br />    return tableTitle.length;<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public String getColumnName( int col )<br />  {<br />    if( col&gt;=0&amp;&amp;col&lt;tableTitle.length )<br />      {<br />        return tableTitle[col];<br />      }<br />    else{ return "";<br />        }<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public Class getColumnClass( int col )<br />  {<br />    if( col==0 )  //第一列为选择框<br />      {<br />        return Boolean.class;<br />      }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">    return Object.class;<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public int getRowCount()<br />  {<br />    return tableBody.size();<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public boolean isCellEditable( int row, int col )<br />  {<br />    return ( col==0 );  //如果是第一列给编辑，其他不给<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/128927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-07-08 22:03 <a href="http://www.blogjava.net/needjava/archive/2007/07/08/128927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕关于JTable的Renderer</title><link>http://www.blogjava.net/needjava/archive/2007/07/03/127722.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Mon, 02 Jul 2007 20:14:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/07/03/127722.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/127722.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/07/03/127722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/127722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/127722.html</trackback:ping><description><![CDATA[
		<p style="FONT-FAMILY: Courier">import java.awt.Component;</p>
		<p style="FONT-FAMILY: Courier">import javax.swing.JFrame;<br />import javax.swing.JTable;<br />import javax.swing.JTextField;<br />import javax.swing.JScrollPane;<br />import javax.swing.DefaultCellEditor;</p>
		<p style="FONT-FAMILY: Courier">import javax.swing.event.ChangeEvent;<br />import javax.swing.event.TableModelEvent;<br />import javax.swing.event.TableModelListener;</p>
		<p style="FONT-FAMILY: Courier">import javax.swing.table.TableModel;<br />import javax.swing.table.TableCellRenderer;<br />import javax.swing.table.AbstractTableModel;<br />import javax.swing.table.DefaultTableCellRenderer;</p>
		<p style="FONT-FAMILY: Courier">
				<br />public class WhoFirstTest<br />{<br />  public static void main( String[]args )<br />  {<br />    final Object[][] data=new Object[][]{ { "11", new Integer( 1 ) }, { "22", new Integer( 2 ) } };</p>
		<p style="FONT-FAMILY: Courier">    final String[] header=new String[]{ "表头1", "表头2" };</p>
		<p style="FONT-FAMILY: Courier">    Table table=new Table( new BaseModel( data, header ) );</p>
		<p style="FONT-FAMILY: Courier">    JTextField editor=new JTextField();<br />    editor.setBorder( null );<br />    table.setDefaultEditor( Object.class, new BaseEditor( editor ) );</p>
		<p style="FONT-FAMILY: Courier">    table.setDefaultRenderer( Object.class, new BaseRenderer() );</p>
		<p style="FONT-FAMILY: Courier">    table.getModel().addTableModelListener( new TableModelListener()<br />    {<br />      public void tableChanged( TableModelEvent e )<br />      {<br />        System.out.println( "tableChanged called" );<br />        /*/<br />        System.out.println( "FirstRow="+e.getFirstRow() );<br />        System.out.println( "LastRow="+e.getLastRow() );<br />        System.out.println( "Column="+e.getColumn() );<br />        System.out.println( "Type="+( ( e.getType()==TableModelEvent.INSERT ) ? "Insert" : ( e.getType()==TableModelEvent.UPDATE ) ? "Update" : ( e.getType()==TableModelEvent.DELETE ) ? "Delete" : "Unknow" ) );<br />        /*/<br />        //Do CRUD for DB ...<br />        //*/<br />      }<br />    } );</p>
		<p style="FONT-FAMILY: Courier">    JFrame frame=new JFrame( "看看给单元格赋值的顺序" );<br />    frame.setContentPane( new JScrollPane( table ) );<br />    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );<br />    frame.pack();<br />    frame.setVisible( true );<br />  }<br />}</p>
		<p style="FONT-FAMILY: Courier">
				<br />class Table extends JTable<br />{<br />  public Table( TableModel model )<br />  {<br />    super( model );<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public void editingStopped( ChangeEvent e )<br />  {<br />    System.out.println( "editingStopped called" );<br />    super.editingStopped( e );<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public Component prepareRenderer( TableCellRenderer renderer, int row, int column )<br />  {<br />    System.out.println( "prepareRenderer called" );<br />    return super.prepareRenderer( renderer, row, column );<br />  }<br />}</p>
		<p style="FONT-FAMILY: Courier">
				<br />class BaseModel extends AbstractTableModel<br />{<br />  Object[][] data = null;<br />  Object[] header = null;</p>
		<p style="FONT-FAMILY: Courier">  public BaseModel( Object[][] data, Object[] header )<br />  {<br />    this.data   = data;<br />    this.header = header;<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public String getColumnName( int column )<br />  {<br />    return header[column].toString();<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public int getRowCount()<br />  {<br />    return data.length;<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public int getColumnCount()<br />  {<br />    return header.length;<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public Object getValueAt( int row, int col )<br />  {<br />    return data[row][col];<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public boolean isCellEditable( int row, int column )<br />  {<br />    return true;<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public void setValueAt( Object value, int row, int col )<br />  {<br />    System.out.println( "setValueAt called" );<br />    data[row][col]=value;<br />    fireTableCellUpdated( row, col );<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public void fireTableCellUpdated( int row, int column )<br />  {<br />    super.fireTableCellUpdated( row, column );<br />    System.out.println( "fireTableCellUpdated called" );<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public void fireTableChanged( TableModelEvent e )<br />  {<br />    super.fireTableChanged( e );<br />    System.out.println( "fireTableChanged called" );<br />  }<br />}</p>
		<p style="FONT-FAMILY: Courier">
				<br />class BaseRenderer extends DefaultTableCellRenderer<br />{<br />  public BaseRenderer()<br />  {<br />    super();<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public Component getTableCellRendererComponent( JTable table,<br />                                                  Object value,<br />                                                  boolean isSelected,<br />                                                  boolean hasFocus,<br />                                                  int row,<br />                                                  int column )<br />  {<br />    System.out.println( "BaseRenderer called" );</p>
		<p style="FONT-FAMILY: Courier">    setText( ( value==null ) ? "" : value.toString() );</p>
		<p style="FONT-FAMILY: Courier">    return this;<br />  }<br />}</p>
		<p style="FONT-FAMILY: Courier">
				<br />class BaseEditor extends DefaultCellEditor<br />{<br />  public BaseEditor( JTextField editor )<br />  {<br />    super( editor );<br />  }</p>
		<p style="FONT-FAMILY: Courier">  public boolean stopCellEditing()<br />  {<br />    System.out.println( "stopCellEditing called" );</p>
		<p style="FONT-FAMILY: Courier">    String value=(String)getCellEditorValue();</p>
		<p style="FONT-FAMILY: Courier">    try{ Integer.parseInt( value );<br />       }<br />    catch( NumberFormatException e )<br />         {<br />           this.editorComponent.requestFocus();<br />           return false;<br />         }</p>
		<p style="FONT-FAMILY: Courier">    return super.stopCellEditing();<br />  }<br />}</p>
<img src ="http://www.blogjava.net/needjava/aggbug/127722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-07-03 04:14 <a href="http://www.blogjava.net/needjava/archive/2007/07/03/127722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔SQL〕〔Java〕MS SQL Server Type</title><link>http://www.blogjava.net/needjava/archive/2007/07/03/127720.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Mon, 02 Jul 2007 20:03:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2007/07/03/127720.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/127720.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2007/07/03/127720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/127720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/127720.html</trackback:ping><description><![CDATA[
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import java.io.FileWriter;<br />import java.io.IOException;<br />import java.io.BufferedWriter;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import java.awt.Toolkit;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import java.sql.Types;<br />import java.sql.ResultSet;<br />import java.sql.Statement;<br />import java.sql.Connection;<br />import java.sql.SQLException;<br />import java.sql.DriverManager;<br />import java.sql.ResultSetMetaData;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">import javax.swing.JOptionPane;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<br />
				<font color="#808080" size="2">final class GetSQLServerType<br />{<br />  private Connection        connection;<br />  private Statement         statement;<br />  private ResultSet         resultSet;<br />  private ResultSetMetaData metaData;</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public GetSQLServerType()<br />  {<br />    try{ //实例化MSSQL2000的驱动<br />         Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         //连接数据库<br />         connection=DriverManager.getConnection( "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=Northwind", "sa", "" );<br /><br />         //创建Statement接口对象<br />         statement=connection.createStatement();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         resultSet=statement.executeQuery( " SELECT * FROM SQLServerType " );<br /><br />         metaData=resultSet.getMetaData();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         int columnCount=metaData.getColumnCount();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         FileWriter fw=new FileWriter( "SQLServerType.htm" );<br />         BufferedWriter bfw=new BufferedWriter( fw );</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         bfw.write( "&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=GBK\"&gt;" ); bfw.newLine();<br />         bfw.write( "&lt;title&gt;SQL Server数据类型对应Java类型&lt;/title&gt;" ); bfw.newLine();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         //申明样式表//////////////////////////////////////////<br />         bfw.write( "&lt;style type=text/css&gt;" ); bfw.newLine();<br />         bfw.write( "td{ color:          #000000;" ); bfw.newLine();<br />         bfw.write( "    background:     #FFFFFF;" ); bfw.newLine();<br />         bfw.write( "    height:         20px;" ); bfw.newLine();<br />         bfw.write( "    font-size:      10pt;" ); bfw.newLine();<br />         bfw.write( "    font-weight:    normal;" ); bfw.newLine();<br />         bfw.write( "    font-family:    宋体;" ); bfw.newLine();<br />         bfw.write( "    text-align:     right;" ); bfw.newLine();<br />         bfw.write( "    vertical-align: middle;" ); bfw.newLine();<br />         bfw.write( "    table-layout:   fixed;" ); bfw.newLine();<br />         bfw.write( "    padding-top:    2;" ); bfw.newLine();<br />         bfw.write( "    padding-bottom: 2;" ); bfw.newLine();<br />         bfw.write( "    padding-left:   2;" ); bfw.newLine();<br />         bfw.write( "    padding-right:  2;" ); bfw.newLine();<br />         bfw.write( "  }" ); bfw.newLine();<br />         bfw.write( "td.left{ text-align: left; }" ); bfw.newLine();<br />         bfw.write( "td.center{ text-align: center; }" ); bfw.newLine();<br />         bfw.write( "&lt;/style&gt;" ); bfw.newLine();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         bfw.write( "&lt;body&gt;" ); bfw.newLine();<br />         bfw.write( "&lt;table border=1 bordercolor=#000000 cellspacing=0 style=\"border-collapse:collapse\"&gt;" );bfw.newLine();<br />         bfw.write( "  &lt;tr&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnClassName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnLabel( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getCatalogName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnCount()&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnDisplaySize( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnType( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getColumnTypeName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getPrecision( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getScale( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getSchemaName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.getTableName( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isAutoIncrement( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isCaseSensitive( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isCurrency( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isDefinitelyWritable( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isNullable( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isReadOnly( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isSearchable( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isSigned( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "    &lt;td noWrap class=center&gt;metaData.isWritable( column )&lt;/td&gt;" );bfw.newLine();<br />         bfw.write( "  &lt;/tr&gt;" );bfw.newLine();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         for( int column=0; column&lt;columnCount; column++ )<br />            {<br />              /*/<br />              //metaData的所有方法<br />              bfw.write( "metaData.getColumnCount() "                         + metaData.getColumnCount() );bfw.newLine();<br />              bfw.write( "metaData.isAutoIncrement( "+( column+1 )+" ) "      + metaData.isAutoIncrement( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isCaseSensitive( "+( column+1 )+" ) "      + metaData.isCaseSensitive( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isSearchable( "+( column+1 )+" ) "         + metaData.isSearchable( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isCurrency( "+( column+1 )+" ) "           + metaData.isCurrency( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isNullable( "+( column+1 )+" ) "           + metaData.isNullable( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isSigned( "+( column+1 )+" ) "             + metaData.isSigned( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnDisplaySize( "+( column+1 )+" ) " + metaData.getColumnDisplaySize( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnLabel( "+( column+1 )+" ) "       + metaData.getColumnLabel( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnName( "+( column+1 )+" ) "        + metaData.getColumnName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getSchemaName( "+( column+1 )+" ) "        + metaData.getSchemaName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getPrecision( "+( column+1 )+" ) "         + metaData.getPrecision( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getScale( "+( column+1 )+" ) "             + metaData.getScale( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getTableName( "+( column+1 )+" ) "         + metaData.getTableName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getCatalogName( "+( column+1 )+" ) "       + metaData.getCatalogName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnType( "+( column+1 )+" ) "        + metaData.getColumnType( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnTypeName( "+( column+1 )+" ) "    + metaData.getColumnTypeName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isReadOnly( "+( column+1 )+" ) "           + metaData.isReadOnly( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isWritable( "+( column+1 )+" ) "           + metaData.isWritable( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isDefinitelyWritable( "+( column+1 )+" ) " + metaData.isDefinitelyWritable( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.getColumnClassName( "+( column+1 )+" ) "   + metaData.getColumnClassName( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "metaData.isSigned( "+( column+1 )+" ) "             + metaData.isSigned( ( column+1 ) ) );bfw.newLine();<br />              bfw.write( "--------------------------------------------------------------------------------" );bfw.newLine();<br />              //*/</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">              bfw.write( "  &lt;tr&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnClassName( column+1 )   +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnLabel( column+1 )       +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getCatalogName( column+1 )       +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnCount()                 +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnDisplaySize( column+1 ) +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnName( column+1 )        +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnType( column+1 )        +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getColumnTypeName( column+1 )    +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getPrecision( column+1 )         +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getScale( column+1 )             +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getSchemaName( column+1 )        +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.getTableName( column+1 )         +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isAutoIncrement( column+1 )      +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isCaseSensitive( column+1 )      +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isCurrency( column+1 )           +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isDefinitelyWritable( column+1 ) +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isNullable( column+1 )           +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isReadOnly( column+1 )           +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isSearchable( column+1 )         +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isSigned( column+1 )             +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "    &lt;td noWrap class=center&gt;"+metaData.isWritable( column+1 )           +"&lt;/td&gt;" );bfw.newLine();<br />              bfw.write( "  &lt;/tr&gt;" );bfw.newLine();<br />            }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         bfw.write( "&lt;/table&gt;" );bfw.newLine();<br />         bfw.write( "&lt;/body&gt;" ); bfw.newLine();</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">         bfw.flush();<br />         fw.close();<br />       }<br />    catch( IOException ioe )<br />         {<br />           Toolkit.getDefaultToolkit().beep();<br />           JOptionPane.showMessageDialog( null, "创建文件失败！", "创建文件错误", JOptionPane.WARNING_MESSAGE );<br />           System.out.println( ioe );<br />         }<br />    catch( ClassNotFoundException cnfe )<br />         {<br />           Toolkit.getDefaultToolkit().beep();<br />           JOptionPane.showMessageDialog( null, "找不到数据库驱动文件！", "数据库错误", JOptionPane.WARNING_MESSAGE );<br />           System.out.println( cnfe );<br />         }<br />    catch( SQLException se )<br />         {<br />           Toolkit.getDefaultToolkit().beep();<br />           JOptionPane.showMessageDialog( null, "连接数据库失败！请检查数据库是否运行。", "数据库错误", JOptionPane.WARNING_MESSAGE );<br />           System.out.println( se );<br />         }<br />    finally{ try{ if( resultSet!=null )<br />                    {<br />                      resultSet.close();  //关闭ResultSet接口实例<br />                    }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">                  if( statement!=null )<br />                    {<br />                      statement.close();  //关闭Statement接口实例<br />                    }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">                  if( connection!=null )<br />                    {<br />                      connection.close();  //关闭Connection接口实例<br />                    }<br />                }<br />             catch( SQLException se )<br />                  {<br />                    System.out.println( se );<br />                  }<br />           }<br />  }</font>
		</p>
		<p style="FONT-FAMILY: Courier New">
				<font color="#808080" size="2">  public static void main( String[] arg )<br />  {<br />    GetSQLServerType g=new GetSQLServerType();<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/127720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2007-07-03 04:03 <a href="http://www.blogjava.net/needjava/archive/2007/07/03/127720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕得到网上邻居</title><link>http://www.blogjava.net/needjava/archive/2006/09/15/69803.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Fri, 15 Sep 2006 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/needjava/archive/2006/09/15/69803.html</guid><wfw:comment>http://www.blogjava.net/needjava/comments/69803.html</wfw:comment><comments>http://www.blogjava.net/needjava/archive/2006/09/15/69803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/needjava/comments/commentRss/69803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/needjava/services/trackbacks/69803.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" color="#808080" size="2">import java.io.IOException;<br />import java.io.BufferedReader;<br />import java.io.InputStreamReader;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 使用 net view /domain 得到工作组列表<br /> *<br /> * 使用 net view /domain:workgroup 得到指定工作组的机器列表<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2006.09.11<br /> *<br /> * Version: 1.0<br /> *<br /> ******************************************************************************/<br />public class Neighborhood<br />{<br />  private static String getNeighborhood( String command, String domain )<br />  {<br />    String line="";</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    boolean begin=false;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    StringBuffer sb=new StringBuffer();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    try{ Process process=Runtime.getRuntime().exec( command );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         BufferedReader br=new BufferedReader( new InputStreamReader( process.getInputStream() ) );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         while( ( line=br.readLine() )!=null )<br />              {<br />                line=line.trim();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                //你的工作组千万不要命名为“命令成功完成。”或者是“The command completed successfully.”<br />                if( line.endsWith( "命令成功完成。" )||line.equalsIgnoreCase( "The command completed successfully." ) )<br />                  {<br />                    begin=false;</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                    break;<br />                  }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                if( begin )<br />                  {<br />                    if( domain.length()&gt;0 )<br />                      {<br />                        sb.append( "  " ).append( line ).append( "\r\n" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                        //System.out.println( "得到   "+line );<br />                      }<br />                    else{ sb.append( line ).append( "\r\n" );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                          //System.out.println( "得到 "+line );</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                          sb.append( getNeighborhood( "net view /domain:"+line, line ) );<br />                        }<br />                  }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">                if( line.endsWith( "-" ) )<br />                  {<br />                    begin=true;<br />                  }<br />              }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         br.close();</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">         process.waitFor();<br />       }<br />    catch( IOException ioe )<br />         {<br />           System.out.println( ioe );<br />         }<br />    catch( Exception e )<br />         {<br />           System.out.println( e );<br />         }</font>
		</p>
		<p>
				<font face="Courier New" color="#808080" size="2">    return sb.toString();<br />  }</font>
		</p>
		<p>
				<br />
				<font face="Courier New" color="#808080" size="2">  public static void main( String[] args )<br />  {<br />    System.out.println( Neighborhood.getNeighborhood( "net view /domain", "" ) );<br />  }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/needjava/aggbug/69803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/needjava/" target="_blank">NeedJava</a> 2006-09-15 16:07 <a href="http://www.blogjava.net/needjava/archive/2006/09/15/69803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>