﻿<?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>C++博客-LIULIANG-随笔分类-java</title><link>http://www.cppblog.com/LIULIANG/category/19014.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 05 Oct 2012 15:41:14 GMT</lastBuildDate><pubDate>Fri, 05 Oct 2012 15:41:14 GMT</pubDate><ttl>60</ttl><item><title>JAVA向文件中追加内容 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/10/04/192788.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Thu, 04 Oct 2012 09:49:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/10/04/192788.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/192788.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/10/04/192788.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/192788.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/192788.html</trackback:ping><description><![CDATA[向文件尾加入内容有多种方法，常见的方法有两种： 
<p><strong><font color="#ff0000">RandomAccessFile类可以实现随机访问文件的功能，可以以读写方式打开文件夹的输出流</font></strong></p>
<p><strong><font color="#ff0000">public void seek(long pos)可以将读写指针移到文件尾，参数Pos表示从文件开头以字节为单位测量的偏移位置，在该位置文件指针。</font></strong></p>
<p><strong><font color="#ff0000">public void write(int pos)将数据写到读写指针后面，完成文件的追加。参数pos表示要写入的Byte</font></strong></p>
<p><strong><font color="#ff0000">通过FileWrite打开文件输出流，构造FileWrite时指定写入模式，是一个布尔量，为真时表示写入的内容添加到已有文件的内容的后面，为假时表示重新写文件，以前的记录被清空，默认的值为假。</font></strong></p>
<p>具体的例子可以参看以下的代码：</p>
<p>package Characters;</p>
<p>import java.io.BufferedReader;<br />import java.io.File;<br />import java.io.FileReader;<br />import java.io.FileWriter;<br />import java.io.IOException;<br />import java.io.RandomAccessFile;</p>
<p>public class CharactersDemo_03 {<br />&nbsp;// 使用RandomAccessFile实现文件的追加，其中：fileName表示文件名；content表示要追加的内容<br />&nbsp;public static void appendMethod_one(String fileName, String content) {<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;// 按读写方式创建一个随机访问文件流<br />&nbsp;&nbsp;&nbsp;RandomAccessFile raf = new RandomAccessFile(fileName, "rw");<br />&nbsp;&nbsp;&nbsp;long fileLength = raf.length();// 获取文件的长度即字节数<br />&nbsp;&nbsp;&nbsp;// 将写文件指针移到文件尾。<br />&nbsp;&nbsp;&nbsp;raf.seek(fileLength);<br />&nbsp;&nbsp;&nbsp;// 按字节的形式将内容写到随机访问文件流中<br />&nbsp;&nbsp;&nbsp;raf.writeBytes(content);<br />&nbsp;&nbsp;&nbsp;// 关闭流<br />&nbsp;&nbsp;&nbsp;raf.close();<br />&nbsp;&nbsp;} catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;// 使用FileWriter实现文件的追加，其中：fileName表示文件名；content表示要追加的内容<br />&nbsp;public static void appendMethod_two(String fileName, String content) {<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;// 创建一个FileWriter对象，其中boolean型参数则表示是否以追加形式写文件<br />&nbsp;&nbsp;&nbsp;FileWriter fw = new FileWriter(fileName, true);<br />&nbsp;&nbsp;&nbsp;// 追加内容<br />&nbsp;&nbsp;&nbsp;fw.write(content);<br />&nbsp;&nbsp;&nbsp;// 关闭文件输出流<br />&nbsp;&nbsp;&nbsp;fw.close();<br />&nbsp;&nbsp;} catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;public static void showFileContent(String fileName) {<br />&nbsp;&nbsp;File file = new File(fileName);<br />&nbsp;&nbsp;BufferedReader reader = null;<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;System.out.println("以行为单位读取文件内容，一次读一整行：");<br />&nbsp;&nbsp;&nbsp;reader = new BufferedReader(new FileReader(file));<br />&nbsp;&nbsp;&nbsp;String tempString = null;<br />&nbsp;&nbsp;&nbsp;int line = 1;<br />&nbsp;&nbsp;&nbsp;// 一次读入一行，直到读入null为文件结束<br />&nbsp;&nbsp;&nbsp;while ((tempString = reader.readLine()) != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;// 显示行号<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line + ": " + tempString);<br />&nbsp;&nbsp;&nbsp;&nbsp;line++;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;reader.close();<br />&nbsp;&nbsp;} catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;} finally {<br />&nbsp;&nbsp;&nbsp;if (reader != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e1) {<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;String fileName = "C:/temp/append.txt";<br />&nbsp;&nbsp;String content = "Successful operation!";<br />&nbsp;&nbsp;System.out.println(fileName + "文件的内容如下：");<br />&nbsp;&nbsp;CharactersDemo_03.showFileContent(fileName); // 显示文件内容<br />&nbsp;&nbsp;// 按RandomAccessFile的形式追加文件<br />&nbsp;&nbsp;System.out.println("\n按RandomAccessFile的形式追加文件后的内容如下：");<br />&nbsp;&nbsp;CharactersDemo_03.appendMethod_one(fileName, content);<br />&nbsp;&nbsp;CharactersDemo_03.appendMethod_one(fileName, "\n Game is Over！ \n");<br />&nbsp;&nbsp;CharactersDemo_03.showFileContent(fileName); // 显示文件内容<br />&nbsp;&nbsp;// 按FileWriter的形式追加文件<br />&nbsp;&nbsp;System.out.println("\n按FileWriter的形式追加文件后的内容如下：");<br />&nbsp;&nbsp;CharactersDemo_03.appendMethod_two(fileName, content);<br />&nbsp;&nbsp;CharactersDemo_03.appendMethod_two(fileName, "\n Game is Over！ \n");<br />&nbsp;&nbsp;CharactersDemo_03.showFileContent(fileName); // 显示文件内容<br />&nbsp;}<br />}<br /></p><br /><br />转载：<a href="http://wjq008wang.blog.163.com/blog/static/97323811201182124225149/">http://wjq008wang.blog.163.com/blog/static/97323811201182124225149/</a><img src ="http://www.cppblog.com/LIULIANG/aggbug/192788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-10-04 17:49 <a href="http://www.cppblog.com/LIULIANG/archive/2012/10/04/192788.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 获取计算机cpu 利用率和内存使用信息 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/09/20/191428.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Thu, 20 Sep 2012 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/09/20/191428.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/191428.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/09/20/191428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/191428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/191428.html</trackback:ping><description><![CDATA[网址：<div>http://bbs.chinaunix.net/thread-3628555-1-1.html</div><img src ="http://www.cppblog.com/LIULIANG/aggbug/191428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-09-20 21:55 <a href="http://www.cppblog.com/LIULIANG/archive/2012/09/20/191428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant 中classpath 的使用 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/09/17/191013.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Mon, 17 Sep 2012 12:07:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/09/17/191013.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/191013.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/09/17/191013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/191013.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/191013.html</trackback:ping><description><![CDATA[<p>Ant 在运行一些任务的时候需要用&lt;classpath&gt;指定类路径.&lt;classpath&gt;可以内嵌 &lt;pathelement&gt;.需要注意的是</p>
<p>&lt;pathelement path="${project.jar.path}&gt; 里面path指向的不是一个预先定义的&lt;path&gt;,而是一个符合classpath规则的property.</p>
<p>1,正确的例子:</p>
<p>&lt;property name="project.jar.path" value="D:/temp/temp.jar;D:/temp/temp1.jar" /&gt;</p>
<p>&lt;classpath id="tcls"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;pathelement path="${project.jar.path}" /&gt;<br />&nbsp;&lt;/classpath&gt;</p>
<p>&nbsp;</p>
<p>2,如果误认为path应该指向一个预先定义的path是不正确的.</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;path id="testTask.classpath"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;fileset dir="${project.lib.path}"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar" /&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/path&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath id="tcls"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;pathelement path="${testTask.classpath}" /&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;</p>
<p>如果想在&lt;classpath&gt;里引用预先定义好的path,应该如下:</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath id="tcls"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;path refid="testTask.classpath" /&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;</p>
<p>&nbsp;</p>
<p>pathelement的path指定的是一个预先定义的property或者一个符合classpath规则的字符串,</p>
<p>location指定的是一个jar文件或者一个目录.</p>
<p>&lt;property name="project.jar.path" value="D:/temp/temp.jar;D:/temp/temp1.jar" /&gt;<br />&lt;classpath&gt;<br />&nbsp;&nbsp;&nbsp; &lt;pathelement path="${project.jar.path}" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;pathelement location="lib/helper.jar"/&gt;<br />&lt;/classpath&gt;</p>
<p>classpath内嵌的元素除了pathelement和path之外,还可以是fileset,dirset和filelist.</p>
<p>&lt;path id="cls.path.ref"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;fileset dir="lib" includes="*.jar" /&gt;<br />&lt;/path&gt;<br />&lt;filelist id="third-party_jars" dir="${jar.dir}"files="foo.jar, bar.jar"/&gt; <br /><br />&lt;classpath&gt;<br />&nbsp;&nbsp;&nbsp; &lt;pathelement path="d:/temp/temp.jar" /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;path refid="cls.path.ref" /&gt;<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;fileset dir="lib"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar" /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;pathelement location="classes" /&gt;<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;dirset dir="${build.dir}"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;include name="apps/**/classes" /&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;exclude name="apps/**/*Test*" /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/dirset&gt;<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;filelist refid="third-party_jars" /&gt;<br />&lt;/classpath&gt;<br /><br />转自：<a href="http://blog.csdn.net/kkdelta/article/details/5684228">http://blog.csdn.net/kkdelta/article/details/5684228</a><br /></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/191013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-09-17 20:07 <a href="http://www.cppblog.com/LIULIANG/archive/2012/09/17/191013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何区分JDK,Tomcat,eclipse的32位与64版本 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/09/13/190509.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Thu, 13 Sep 2012 05:55:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/09/13/190509.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/190509.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/09/13/190509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/190509.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/190509.html</trackback:ping><description><![CDATA[<div class="blog_content" id="blog_content">
<p>当你想下载Linux、JDK、Tomcat、eclipse时，你是下载32位版本还是64位版本？64位版本有两种，应该选哪一个？当你看到这些内容：x86、x64、x86－32、x86－64、ia64、i80386、i80486、i80586、i80686，知道是干什么的吗？</p>
<p>这事儿要先从CPU说起：<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2"><strong style="font-weight: bold">IA-32架构与IA-64架构</strong><br />IA是Intel Architecture（英特尔体系结构）的英语缩写。<br />IA-32架构下有32位CPU，也64位CPU。（我们经常使用的CPU）<br />IA-64架构下有Intel64的位CPU （只有服务器使用的CPU）<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</font></span></p>
<p>&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2"><strong style="font-weight: bold">IA-32架构：</strong><br />本架构的CPU都采用<span style="color: #ff0000">X86指令</span><br />Intel、AMD、Cyrix等厂家都生产使用X86指令集的CPU<br />&nbsp;<br />其中32位（x86－32）的CPU有：i80386、i80486、i80586、i80686、统称i80x86、<span style="color: #ff0000">简称x86</span>。<br />其中64位（x86－64，EM64T）的CPU有：2006年以后生产的PC机CPU都是64位的。<span style="color: #ff0000">简称x64</span><br />x86－64是AMD在其64位处理器系列中采用的技术<br />EM64T是Intel在其64位处理器系列中采用的技术<br />x86－64与EM64T都差不多，都是64位。最大的优点就是可以全面兼容以前的32位x86指令的应用程序，因为都是IA-32架构架构。<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /><strong style="font-weight: bold">IA-64架构：</strong><br />IA－64架构是英特尔为了全面提高以前IA－32位处理器的运算性能，是Intel和Hp共同开发了6年的64位CPU架构，是专为服务器市场开发的一种全新的处理器架构，它放弃了以前的IA-32架构（x86系统CPU采用的架构），认为它严重阻碍了处理器的性能提高。它的最初应用是英特尔的Itanium（安腾）系列服务器处理器，现在最新的Itanium 2系列处理器也是采用这一架构的。由于它不能很好地解决与以前32位应用程序的兼容，所以应用受到较大的限制，尽管目前Intel采取了各种软、硬方法来弥补这一不足，但随着AMD Operon处理器的全面投入，Intel的IA－64架构的这两款处理器前景不容乐观。&nbsp;<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /><strong style="font-weight: bold">RISC架构</strong>&nbsp;&nbsp;<br />采用这一架构的仍是IBM、SUN和HP等。不过近几年由于这一处理器架构标准没有完全统一、处理器的发展和应用非常缓慢，使得原来本占有的绝大多数中高档服务器市场被IA架构瓜分了大部分江山，已是日趋衰落。目前连这几家服务器厂商也开始了自己放弃，转投IA旗下，推出越来越多的IA架构服务器，以保生存。</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">目前采用这一架构的主要服务器处理器有IBM的Power4、Compaq Alpha 21364、HP PA－8X00、Sun的UltraSPARC III、SGI的MIPS 64 20Kc等。<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">说完了CPU，现在说一说软件，下载时如何选择,主看下面的示例：</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><strong style="font-weight: bold">SUN JDK:</strong></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">jdk-6u25-windows-i586.exe&nbsp; 适用于x86－32（简称x86）的CPU，要586以上的CPU，因为x86－64的CPU能向下兼容32位，所以运行在x86－64CPU也是可以的，但是以32位运行的。<br />jdk-6u25-windows-x64.exe&nbsp;&nbsp; 适用于x86－64，EM64T 的64位CPU。<br />jdk-6u25-windows-ia64.exe&nbsp; 适用于IA－64Itanium（安腾）系列服务器CPU</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><strong style="font-weight: bold">Tomcat:</strong><br />apache-tomcat-6.0.32-windows-x86.zip&nbsp; 适用于x86－32（简称x86）的32位CPU，因为x86－64的CPU能向下兼容32位，所以运行在x86－64CPU也是可以的，但是以32位运行的。<br />apache-tomcat-6.0.32-windows-x64.zip&nbsp; 适用于x86－64，EM64T 的64位CPU。（简称x64）<br />apache-tomcat-6.0.32-windows-i64.zip&nbsp; 适用于Itanium（安腾）系列服务器CPU,全称应该是ia64，这里简写了。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><strong style="font-weight: bold; font-size: small"><font size="2">CentOS:</font></strong></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">Linux操作系统的一个发行版本CentOS，下载时有<br />CentOS-5.6-i386-bin-DVD.iso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 适用于x86－32（简称x86）的CPU，要386以上的CPU<br />CentOS-5.6-x86_64-bin-DVD-1of2.iso 适用于x86－64，EM64T 的64位CPU（简称x64）</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><strong style="font-weight: bold"><font size="2">eclipse:</font></strong></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">eclipse-jee-helios-SR2-win32.zip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 适用于x86－32（简称x86）的CPU<br />eclipse-jee-helios-SR2-win32-x86_64.zip&nbsp; 适用于x86－64，EM64T 的64位CPU（简称x64）</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2"><strong style="font-weight: bold">如何选择</strong>：如果你想使用32位程序，就下载32位的版本，如果你想使用64位的版本，请根据你的CPU来选择，但我想没人使用Itanium（安腾）的64位CPU来做开发吧（服务器除外），所以ia64不能选，只能选x86－64。总之就是根据你的实际情况选择。</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">最后说明一下，要所有的软件，硬件，全是64位的，你的应用才算成功的运行在64位上了。比如：</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">使用64位的CPU，现在（2006年以后生产）的CPU都是64位。<br />安装64位的操作系统，比如64位的windows 7<br />安装64位的JDK,比如jdk-6u25-windows-x64.exe<br />安装64位的Tomcat,比如apache-tomcat-6.0.32-windows-x64.zip</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">安装64位的eclipse，比如eclipse-jee-helios-SR2-win32-x86_64.zip</font></span></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; line-height: 25px; padding-top: 0px; background-color: #ffffff; text-align: left"><span style="font-size: small"><font size="2">注：本文不讨论64位程序与32位程序的性能问题，只讨论如何选择相应的版本。</font></span></p></div><br />转自：<a href="http://wujianjun12315.iteye.com/blog/1402809">http://wujianjun12315.iteye.com/blog/1402809</a><img src ="http://www.cppblog.com/LIULIANG/aggbug/190509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-09-13 13:55 <a href="http://www.cppblog.com/LIULIANG/archive/2012/09/13/190509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTree添加图片 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/31/188944.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Fri, 31 Aug 2012 13:31:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/31/188944.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/188944.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/31/188944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/188944.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/188944.html</trackback:ping><description><![CDATA[<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #0000ff; padding-top: 0px">1.首先定义根节点和叶节点</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" /><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />DefaultMutableTreeNode leafNode1 = new DefaultMutableTreeNode("叶节点1");</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">DefaultMutableTreeNode leafNode2 = new DefaultMutableTreeNode("叶节点2");</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />root.add(leafNode1);</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">root.add(leafNode2);</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #0000ff; padding-top: 0px">2.设置树的显示风格</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">UIManager.getDefaults().put("Tree.lineTypeDashed", true);// 设置连接线为虚线</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />UIManager.getDefaults().put("Tree.lineTypeDashed",false); //设置连接线为直线</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">JTree tree = new JTree(root);//建树</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">tree.putClientProperty("JTree.lineStyle","None");//去掉连接线<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />tree.putClientProperty("JTree.lineStyle","Horizontal");//将树设为水平分隔风格<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />tree.putClientProperty("JTree.lineStyle","Angled");//默认</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #0000ff; padding-top: 0px">3.给树上节点添加图片</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">首先要获得树的DefaultTreeCellRenderer</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Icon rootIcon = new ImageIcon("rootIcon路径");<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />Icon leafIcon = new ImageIcon("leafIcon路径");</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">添加图片</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">rend.setLeafIcon(leafIcon);//叶节点图片<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />rend.setOpenIcon(rootIcon);//树打开时显示的图片<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />rend.setClosedIcon(collIcon);//树关闭时显示的图片</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">若要隐藏根节点</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">tree.setRootVisible(false);</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><img style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" alt="" src="http://k.techq.com/uploads/allimg/110112/10324I1Z-0.gif" /><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #0000ff; padding-top: 0px">setBounds(int x, int y, int width, int height)方法的应用</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">很早以前就看到了这个方法，其说明：（x,y）为组件显示的坐标，（width,height）为组件的宽和高</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">但无论我怎么设置都没有用，知道前天看到了一个具体实例才豁然开朗,只需要加上一行代码：</p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">this.setLayout(null);</p><img src ="http://www.cppblog.com/LIULIANG/aggbug/188944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-31 21:31 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/31/188944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java web开发流行工具总结（转）</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186917.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sat, 11 Aug 2012 14:54:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186917.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186917.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186917.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186917.html</trackback:ping><description><![CDATA[<font size="2">随着Java在Web开发世界中的流行，使越来越多的专家、开源软件爱好者投身到Java应用的大潮中。但这种流行也带来了业界的一些混乱和无序，目前，java开发工具层出不穷，各种新的名次和概念充斥着人们的头脑，也给广大学者和开发人员全面认识java带来了困难。本文就将试图从最简单的角度，介绍部分java web开发工具，以期有助于各位java初学者理清概念。</font> 
<div><wbr></wbr></div>
<div>Eclipse：Eclipse平台最初由IBM于2001年11月推出，经过不断的发展完善，已经成为最著名的开放式集成开发工具。建立在插件机制上，可以为开发者提供将各种工具无缝集成的功能。下载链接：<a href="http://www.eclipse.org/"><font face="Courier New" color="#3b6065">http://www.eclipse.org</font></a></div>
<div><wbr></wbr></div>
<div>Servlet：运行在Web服务器上或应用服务器上的Java程序。</div>
<div><wbr></wbr></div>
<div>JSP(Java Server Pages)：服务器端技术，大大简化了服务器端基于Java的CGI的开发和构建。</div>
<div><wbr></wbr></div>
<div>Tomcat：开源的servlet容器和JSP引擎。非常优秀的集成开发环境。下载链接：<a href="http://tomcat.apache.org/"><font color="#3b6065">http://tomcat.apache.org/</font></a></div>
<div><wbr></wbr></div>
<div>Apache和Apache Tomcat：Apache一般是指<font face="Courier New">apache http server，是世界第一的web服务器。具体参见：<a href="http://www.apache.com/"><font face="Courier New" color="#3b6065">http://www.apache.com</font></a></font></div>
<div><wbr></wbr></div>
<div>MySQL：是众多关系型数据库产品中的一个。下载链接：<a href="http://dev.mysql.com/downloads/" target="_blank"><font color="#3b6065">http://dev.mysql.com/downloads/</font></a></div>
<div><wbr></wbr></div>
<div>Struts：是一种方便实用的Web应用框架，可用Struts实现MVC设计模式，即：模型（Model）、视图（View）、控制器（Controller）。下载链接：<font face="Courier New">http://www.apache.org/dist/jakarta/Struts <wbr></wbr><wbr></wbr></font></div>
<div><wbr></wbr></div>
<div>MyEclipse：另一种收费的，具有支持Struts功能的插件。下载链接：</div>
<div><font face="Courier New">http://www.myeclipseide.com <wbr></wbr><wbr></wbr><wbr></wbr>（可下载试用版）</font></div>
<div><wbr></wbr></div>
<div>Hibernate：基于Java的开源的持久化中间件，实现了对JDBC的轻量的封装，实现了将关系型数据库转化为对象模式的功能。下载链接：<font face="Courier New" color="#3b6065"><a href="http://www.hibernate.org/">http://www.hibernate.org</a></font></div>
<div><wbr></wbr></div>
<div>Spring：支持J2EE开发的轻量级框架，在J2EE社区中主导着Web开发应用的方向。主要由：IoC－反转控制，AOP－面向方面编程，抽象服务三部分组成。下载链接：<a href="http://www.sourceforge.net/projects/springframework"><font face="Courier New" color="#3b6065">http://www.sourceforge.net/projects/springframework</font></a></div>
<div><wbr></wbr></div>
<div>JBoss：开源的免费的轻量级J2EE应用服务器，和WebLogic和WebSphere属于同类产品。下载链接：<a href="http://www.jboss.org/"><font face="Courier New" color="#3b6065">http://www.jboss.org</font></a></div>
<div><wbr></wbr></div>
<div>Lomboz：eclipse平台上支持J2EE开发的优秀插件。下载链接：<a href="http://forge.objectweb.org/projects/lomboz"><font color="#3b6065">http://forge.objectWeb.org/projects/lomboz</font></a></div>
<div><wbr></wbr></div>
<div>JUnit：开放源代码的Java单元测试框架，由Erich Gamma和Kent Beck共同开发完成。下载链接：<a href="http://www.junit.org/"><font color="#3b6065">http://www.JUnit.org</font></a></div>
<div><wbr></wbr></div>
<div>Ant:优秀的编译部署工具。下载链接：<a href="http://ant.apache.org/"><font color="#3b6065">http://ant.apache.org</font></a></div>
<p>转自：<br /><a href="http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/aa71f4c7287d93d5d000606d.html">http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/aa71f4c7287d93d5d000606d.html</a></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/186917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-11 22:54 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/11/186917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA编译为EXE的几种方法（转）</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186916.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sat, 11 Aug 2012 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186916.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186916.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186916.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186916.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)　 <br />　　<strong>1</strong>. 从www.towerj.com获得一个TowerJ编译器，该编译器可以将你的CLASS文件编译成EXE文件。<br />　 <br />　　<strong>2</strong>. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件，这个软件可以从微软的网站免费下载，地址如下：<a href="http://www.microsoft.com/java/download/dl_sdk40.htm"><font color="#000000">http://www.microsoft.com/java/download/dl_sdk40.htm</font></a>　 <br />　　jexegen的语法如下：　 <br />
<p class="code">jexegen /OUT:exe_file_name　 <br />/MAIN:main_class_name main_class_file_name.class　 <br />[and other classes]</p>　 <br />　　<strong>3</strong>. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。<br />　 <br />　　<strong>4</strong>. 使用InstallAnywhere创建安装盘。　 <br /><br />　　<strong>5</strong>. 使用IBM AlphaWorks提供的一个高性能Java编译器，该编译器可以从下面的地址获得：　 <br />　　<a href="http://www.alphaworks.ibm.com/tech/hpc"><font color="#000000">http://www.alphaworks.ibm.com/tech/hpc</font></a><br />　 <br />　　<strong>6</strong>. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本：　 <br />　　<a href="http://www.excelsior-usa.com/jet.html"><font color="#000000">http://www.excelsior-usa.com/jet.html</font></a><br />　 <br />　　<strong>7</strong>. Instantiations公司的JOVE<br />　　<a href="http://www.instantiations.com/jove/...ejovesystem.htm"><font color="#000000">http://www.instantiations.com/jove/...ejovesystem.htm</font></a>　 <br />　　JOVE公司合并了以前的SuperCede，一个优秀的本地编译器，现在SuperCede已经不复存在了。<br />　 <br />　　<strong>8</strong>. JToEXE　 <br />　　Bravo Zulu Consulting, Inc开发的一款本地编译器，本来可以从该公司的网页上免费下载的，不过目前在该公司的主页上找不到了。</div>
<div class="cnt">转自：<br /><a href="http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/7e7cb21e1b2365fd1ad57665.html">http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/7e7cb21e1b2365fd1ad57665.html</a></div><img src ="http://www.cppblog.com/LIULIANG/aggbug/186916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-11 22:53 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/11/186916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java打包-exe文件-最终以setup形式发布（转）</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186915.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sat, 11 Aug 2012 14:51:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186915.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186915.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/11/186915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186915.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186915.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">首先，将编译好的程序打包成jar文件，然后做出exe，这样代码就不可见了；但是exe文件在没有安装jre的电脑上不能运行，如果要求客户再去安装jre 设置环境变量 就不雅了。我们需要将jre打包。 
<p>这几步操作网上介绍的插件和方法很多，但有的好用有的不好用，而且有的还需要注册。经过尝试比较，在&#8220;千里冰封&#8221;的博客上得到了很大的帮助。整理一下。使用这几个工具，您也可以顺利的发布您的java程序！</p>
<p><font size="4">1 打包成双击可执行的jar文件。<br />推荐插件：fatJar（Eclipse使用）<br />下载地址 <a href="http://sourceforge.net/project/showfiles.php?group_id=115990&amp;package_id=125924">http://sourceforge.net/project/showfiles.php?group_id=115990&amp;package_id=125924</a></font></p>
<p><font size="3">我用的是Eclipse，它自带的打包方法在打包一些图片等资源时不是很爽。可以使用这个插件。</font><br />安装方法解压后将plugins文件夹下的net.sf.fjep.fatjar_0.0.24文件夹拷到eclipse安装目录的plugins 下。<br />用此工具可以方便的将eclipse中的工程打包成jar文件。如果是要打成可执行的jar请注意选取主类。<br />你的项目=〉Export..=&gt;向导里有fat jar =&gt;...</p>
<p>&nbsp;</p>
<p><font size="4">2 将jar文件转换成exe文件。<br />推荐工具：exe4j</font></p>
<p>用exe4j把java打包成exe<br /><a href="http://www.blogjava.net/hadeslee/archive/2007/10/12/152228.html">http://www.blogjava.net/hadeslee/archive/2007/10/12/152228.html</a><br />在我们写程序的时候，有时会有一种需求，那就是希望我们的程序是一个可执行文件，而不是一个jar文件，其实大部份时候，可执行的jar文件都可以满足要求，但是如果我们的程序是需要保护的，那么打包成jar文件就不太安全了，因为jar文件就是一个解压缩文件，一解压就什么都能看到了，当然也可以选择混淆，但是混淆了以后排错就没那么容易了，因为混淆的时候，把一些类的信息都混淆了。如何既保证代码的安全又容易排错呢？那么打包成exe就是一种很好的办法了，其实我今天介绍这个方法并不是希望大家去打包成exe文件，因为exe文件毕竟不是跨平台的，用了exe的格式就失去了java的初衷了。</p>
<p>exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的jar文件，还可以打包成windows服务的程序，并且可以设置最低jre的版本，还可以设定启动画面，虽然java6.0已经实现了这一点，但是还是没有exe4j生成的启动画面快。</p>
<p><br /><font size="4">3 将exe文件并jre打包成安装文件 可以在没有安装java虚拟机的电脑上运行<br />推荐工具：install4j</font></p>
<p>Install4j介绍 <br /><a href="http://www.blogjava.net/hadeslee/archive/2007/10/15/152855.html">http://www.blogjava.net/hadeslee/archive/2007/10/15/152855.html</a><br />install4j是一个功能强大的,多平台Java安装文件生成工具，用于生成Java应用程序本地化的安装及应用程序发布。 install4j 的优异性在于它易于使用，紧密的集成到目标平台，以及灵活的JRE 管理与部署选项。</p>
<p>创建发布树<br />install4j的图形用户界面允许你:</p>
<p>&nbsp;&nbsp;&nbsp; * 完全自定义发布树<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在发布树的每一个目录中，你能设置整个目录内容或是磁盘上任何目录的单个文件。定义的视图与结果视图让你能完全控制安装程序将发布的文件。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　<br />&nbsp;&nbsp;&nbsp; * 处理特定平台的差异<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; install4j提供方便的&#8220;包含／排除&#8221;机制，使其适应平台方式来进行发布。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　<br />&nbsp;&nbsp;&nbsp; * 针对Unix, Linux 及Mac OS X所定义的文件权限<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对发布树的每一个元素，当其安装在类似于Unix这样的平台上时，你能自定义用户访问的权限。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　<br />&nbsp;&nbsp;&nbsp; * 定义优良的卸载策略<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对发布树的每一个元素，你能决定在卸载时是否删除它。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　<br />&nbsp;&nbsp;&nbsp; * 定义覆盖策略<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对发布树的每一个元素，你能配置不同的覆盖策略，当安装过程中需要覆盖文件时，这些覆盖策略会指示nstall4j进行相应的操作。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　<br />&nbsp;&nbsp;&nbsp; * 定义安装的组件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你能定义文件及目录的分组，形成分离的安装组件，这样你就可提供给用户来选择只安装一定的组件。</p>
<p>其实一个好的应用如果不太好布署,那么别人也只能对它望而兴叹了,现在有了install4j,很多布署的问题几乎全部解决了.我们可以用exe4j打包java应用,然后用install4j发布java应用,以前java程序布署难的问题,现在几乎都解决了.install4j不但用于打包很合适,并且它还提供了一组很强大很实用的与平台相关的api.这些对于扩展我们的程序也是有很大的帮助的.</p></div>转自：<br /><a href="http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/47a832fa296798d7b48f319b.html">http://hi.baidu.com/%C4%CF%BA%BD%CC%EC%CF%C2/blog/item/47a832fa296798d7b48f319b.html</a> <img src ="http://www.cppblog.com/LIULIANG/aggbug/186915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-11 22:51 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/11/186915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在jdk中Xalan解析器引用</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/04/186297.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sat, 04 Aug 2012 14:54:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/04/186297.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186297.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/04/186297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186297.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186297.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">处理器是</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">Apache XML</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">工程下的一个子工程，它实现了</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">W3C XSLT1.0 </font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">XPath1.0</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">规范，是一个开放源代码的</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">XSLT</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">处理器，</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">提供了</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">java</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">C++</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本。</span><span lang="EN-US" style="mso-no-proof: yes"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">既可以作为一个</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">XSLT</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">工具以命令行的方式使用，也可以作为一个模块在其他应用程序中使用，我们可以在</span><span lang="EN-US"><a href="http://www.fayea.com/apache-mirror/xml/xalan-j/"><font face="Calibri">http://www.fayea.com/apache-mirror/xml/xalan-j/</font></a></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">上下载最新版本的</span><span lang="EN-US" style="mso-no-proof: yes"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-no-proof: yes; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">处理器，下载解压后的目录中有一个<span lang="EN-US"><font face="Calibri">xalan.jar</font></span>，</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，该</span><span lang="EN-US"><font face="Calibri">xalan.jar</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">就是</span><span lang="EN-US"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">解析器，也是实现</span><span lang="EN-US"><font face="Calibri">XSLT</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">XPath</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">规范的类库，如果我们想使用</span><span lang="EN-US"><font face="Calibri">Xalan</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">解析器的话，<br />需要应用<span lang="EN-US"><font face="Calibri">xalan.jar</font></span>和serializer.jar这两个</span><span lang="EN-US"><font face="Calibri">jar</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">包，如果只用用</span><span lang="EN-US"><font face="Calibri">xalan.jar,</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">就会报出：</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">D:\XML\test&gt;java org.apache.xalan.xslt.Process -PARAM oddline-color #FFOOOO<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">-IN em.xml -XSL em.xsl -OUT em.out<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font face="Calibri">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">(</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">错误位置未知</span><span lang="EN-US"><font face="Calibri">)XSLT </font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">错误</span><span lang="EN-US"><font face="Calibri"> (java.lang.NoClassDefFoundError): org/apache/xml/seriali<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">zer/ExtendedContentHandler<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">Exception in thread "main" java.lang.RuntimeException: org/apache/xml/serializer<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">/ExtendedContentHandler<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at org.apache.xalan.xslt.Process.doExit(Process.java:1155)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at org.apache.xalan.xslt.Process.main(Process.java:1128)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font face="Calibri">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Calibri">D:\XML\test&gt;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font face="Calibri">&nbsp;</font></o:p></span><span lang="EN-US"><o:p><font face="Calibri">&nbsp;</font></o:p></span></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/186297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-04 22:54 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/04/186297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jdk在引用组件的方法</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186177.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Fri, 03 Aug 2012 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186177.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186177.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186177.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186177.html</trackback:ping><description><![CDATA[<p align="left">Jdk<span style="font-family: 宋体">在引用组件时，可以有两种方法</span></p>
<p><strong><span style="font-family: 宋体">方法一：</span></strong></p>
<p><span style="font-family: 宋体">将组件的</span>jar<span style="font-family: 宋体">包放到</span>classpath<span style="font-family: 宋体">环境变量中就行了，但是这里的</span>classpath<span style="font-family: 宋体">是用户变量中的，不是系统变量中的，你可以在命令行中使用</span>set classpath<span style="font-family: 宋体">来查看环境变量</span>classpath<span style="font-family: 宋体">的值（同样我们也可以使用这种方法测试我们设置的环境变量是否已经生效）。<br /></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体; color: red">注意：我们可以使用</span><span style="color: red">DOS</span><span style="font-family: 宋体; color: red">窗口中用</span><span style="color: red">set classpath</span><span style="font-family: 宋体; color: red">查看我们设置的</span><span style="color: red">CLASSPATH</span><span style="font-family: 宋体; color: red">环境变量的值是否已经生效了。</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">方法二：</span></strong></p>
<p><span style="font-family: 宋体">我们可以直接将组件的</span>jar<span style="font-family: 宋体">包放到</span>jdk<span style="font-family: 宋体">安装路径下的</span>jre\jre\lib\ext<span style="font-family: 宋体">下面，这种方法准行。</span></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/186177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-03 17:15 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/03/186177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk1.6 环境变量设置</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186169.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Fri, 03 Aug 2012 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186169.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186169.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/03/186169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186169.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186169.html</trackback:ping><description><![CDATA[<p>JAVA_HOME指明JDK安装路径，就是刚才安装时所选择的路径（假设安装在D:\jdk1.4），此路径下包括lib，bin，jre等文件夹（此变量最好设置，因为以后运行tomcat，Eclipse等都需要依靠此变量）。 </p>
<p>Path使得系统可以在任何路径下识别java命令，设为：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin </p>
<p>CLASSPATH为java加载类(class or lib)路径，只有类在classpath中，java命令才能识别，设为：.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径) </p>
<p>特别注意：</p>
<p>&#9670;环境变量值的结尾没有任何符号，不同值之间用；隔开（unix中用:）。 </p>
<p>&#9670;CLASSPATH变量值中的.表示当前目录。 </p>
<p><strong>四、JDK1.6安装的最后检验</strong> </p>
<p>呵呵，基本上就大功告成了，如果不放心，可以检验下。在命令行窗口下，键入java -version命令可以查看到安装的JDK版本信息；键入java命令，可以看到此命令的帮助信息；键入javac命令可以看到此命令的帮助信息。如果都如愿看到，呵呵，检验完毕！</p><img src ="http://www.cppblog.com/LIULIANG/aggbug/186169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-03 16:17 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/03/186169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中引入Xerces解析器</title><link>http://www.cppblog.com/LIULIANG/archive/2012/08/02/186065.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Thu, 02 Aug 2012 13:24:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/08/02/186065.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/186065.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/08/02/186065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/186065.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/186065.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 在jdk1.4版本或更高的版本中已经包含了xml的解析器，但是这些解析器的功可能不是太完美，所以我们可以主动去指定xml解析器（覆盖默认的解析器或指定新的解析器），在网上找了一些资料，但是好像都不行，不是道是什么原因，但是别人又好像弄成功了，所以我认为这些资料还是有帮助的，这里给出这些资料，以备以后使用：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<a href="http://www.w3china.org/blog/blog.asp?name=hongrui&amp;subjectid=326"><strong><font size="4">[java语言]</font></strong><a href="http://www.w3china.org/blog/more.asp?name=hongrui&amp;id=23698"><strong><font size="4">XML api折射出sun与IBM的恩仇</font></strong></a><br />引自：<a href="http://www.w3china.org/blog/more.asp?name=hongrui&amp;id=23698">http://www.w3china.org/blog/more.asp?name=hongrui&amp;id=23698</a><br />
<p>最初的xml解析器是sun的Crimson和IBM的Xerces，这两个开源项目都捐给了apache组织，后来Xerces发展很快，Crimon基本没有人使用。<br />1.4 版本起，用于 XML 处理的 Java API 就已经加入了Java 2 平台中。 利用该 API，可通过一系列标准的 Java 平台 API 来处理 XML 文档。<br />&nbsp;因此，也就无需另外添加 XML 处理包了。sun的JDK1.4使用Crimson，IBM的JDK使用Xerces。<br />如果打算把sun 的jdk程序移植到IBM的JDK下，注意解析器不同，XML处理会出问题。这就说明了java不是&#8220;一次编译，到处运行&#8221;，而是&#8220;一次编译，到处调试&#8221;。<br />如果你把IBM的JDK移植到SUN的JDK下，即使把Xerces包引入CLASSPATH，JDK还是使用Crimson，不信你运行java -verbose试一试。<br />解决的办法就是在在JRE\lib\目录下，建立一个jaxp.properties的文件，<br />内容如下：<br />&nbsp;&nbsp;&nbsp; javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl<br />&nbsp;&nbsp;&nbsp; javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl<br />就可以使用Xerces。<br />或者使用命令行<br /># Add the XML parser jars and set the JAXP factory names<br /># Crimson parser JAXP setup(default)<br />CLASSPATH=$CLASSPATH:../lib/crimson.jar<br />JAXP=-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson.jaxp.DocumentBuilderFactoryImpl<br />JAXP="$JAXP -Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp.SAXParserFactoryImpl"<br />或<br /># Add the XML parser jars and set the JAXP factory names<br /># Xerces parser JAXP setup<br />CLASSPATH=$CLASSPATH:../lib/xerces.jar<br />JAXP=-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl<br />JAXP="$JAXP -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl"<br />最终sun还是指定JAXP规范，JSR 206 Java API for XML Processing(JAXP) 1.3，他已经由JDK1.5实现。<br />JAXP实现了XPath，但是xalan的org.apache.xpath.XPathAPI 类已经移植到了 JRE 1.5 中，重构为com.sun.org.apache.xpath.internal.XPathAPI。&nbsp; <br />如果在以前的JDK中，使用含 XPathAPI 类的 jar，例如 xalan-2.4.1.jar。 将该 jar 加入到 CLASSPATH（类路径）。</p>
<p>W3C的DOM标准API非常难用，于是有人开发 Java专用的XML API，这就是jdom=java+DOM。其中一部分人，去开发dom4j，这个不是非常标准，但是速度很快。<br />使用JDOM隐含服务器风险，因为JBoss和Webphere都是基于JDOM开发的，在这两个服务器下使用JDOM，必须进行相应的设置，而且你的JDOM版本必须与服务器使用的相近，<br />因为JVM只加载一份相同的类，服务器优先加载自己使用的JDOM，你开发用的JDOM不会被加载，你的应用就会出错。<br />使用Dom4J隐含工程问题，主要是hibernate，如果你开发的项目和hibernate合并，Dom4J版本不兼容的话，寻找dom4j相同版本hibernate，或者你改程序适应hibernate的Dom4j。<br />java没有windows<span style="color: #000000">的DL</span><span style="color: #000000">L地狱，但是java的ja</span><span style="color: #000000">r地狱</span><span style="color: #000000">有过而</span>无不及啊。</p>&nbsp;&nbsp; <br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp;&nbsp;</strong><strong style="color: #ff0000"> 下面给出我自己测试出的结果</strong><strong><br /></strong>这里给出我自己在书中看到的资料：<br />&nbsp;&nbsp;&nbsp; 在jdk1.4版本之后支持API的替换机制，我们就可以使用这种机制来替换默认的XML解析器（并不是所有的API都可以替换，只有那些被认可的标准API可以替换），我们就用这种机制来是实现我们的目的。为了替换JDK中提供的XML解析器，需要在JRE\lib目录下创建一个endorsed子目录，然后直接将解析器的实现类的jar包复制到该目录下即可，对于Xerces解析器，我们需要将xercesImpl.jar文件复制到该目录下即可。或者，你可以通过系统属性java.endorsed.dirs来指定另外的路径，假设这两个jar包位于D:\xerces-2_11_0目录下，在执行程序时，可采用如下命令：<br />java -D java.endorsed.dirs=D:\xerces-2_11_0&nbsp; DOMTest<br />(DOMTest为要运行的应用程序的文件名)<br /><br /><br /><br /><img src ="http://www.cppblog.com/LIULIANG/aggbug/186065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-08-02 21:24 <a href="http://www.cppblog.com/LIULIANG/archive/2012/08/02/186065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing菜单与工具栏</title><link>http://www.cppblog.com/LIULIANG/archive/2012/05/25/176187.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Fri, 25 May 2012 14:20:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/05/25/176187.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/176187.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/05/25/176187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/176187.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/176187.html</trackback:ping><description><![CDATA[<div class="tit6"><a href="javascript:;">Swing菜单与工具栏（六）</a> (2011-04-12 18:39) </div>
<div class="tit7">分类： <a href="/space.php?uid=13670711&amp;do=blog&amp;frmd=10827&amp;classid=10828&amp;view=me">Swing</a> </div><br /><br />
<div style="line-height: 1.3" id="detail" class="detail">
<p>6.3 使用工具栏：JToolBar类 
<p>工具栏是现代用户界面中主程序窗口的主要部分。工具栏向用户提供了对于常用命令的简单访问，这通常构建为层次结构的菜单结构。支持这种功能的Swing组件就是JToolBar。 </p>
<p>JToolBar是一个种存放组件的特殊Swing容器。这个容器可以在我们的Java Applet或是程序中用作工具栏，而且可以在程序的主窗口之外浮动或是托拽。JToolBar是一个非常容易使用与理解的简单组件。 </p>6.3.1 创建JToolBar组件 
<p>有四个构造函数可以用来创建JToolBar组件：</p>
<div><font class="Apple-style-span" color="#0000ff">
<div id="codeText" class="codeText">
<ol style="padding-bottom: 5px; margin: 0px 1px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 5px" class="dp-css"><li><span style="color: #000000"><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><br /></span></li><li><span style="color: #ff0000">JToolBar</span> <span style="color: #ff0000">jToolBar</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #0000ff">int</span> orientation<span style="color: #0000cc">)</span><br /></li><li><span style="color: #ff0000">JToolBar</span> <span style="color: #ff0000">jToolBar</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">.</span>VERTICAL<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #ff0000">String</span> <span style="color: #ff0000">name</span><span style="color: #0000cc">)</span><br /></li><li><span style="color: #ff0000">JToolBar</span> <span style="color: #ff0000">jToolBar</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #ff00ff">"Window Title"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #ff0000">String</span> <span style="color: #ff0000">name</span><span style="color: #0000cc">,</span><span style="color: #0000ff">int</span> orientation<span style="color: #0000cc">)</span><br /></li><li><span style="color: #ff0000">JToolBar</span> <span style="color: #ff0000">jToolBar</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #ff00ff">"Window Title"</span><span style="color: #0000cc">,</span> ToolBar<span style="color: #0000cc">.</span>VERTICAL<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span></li></ol></div></font></div><br />
<p>在默认情况下，工具栏是以水平方向进行创建的。然而，我们可以通过JToolBar的常量HORIZONTAL与VERTICAL显示指定方向。 </p>
<p>而且在默认情况下，工具栏是可以浮动的。所以，如果我们使用水平方向创建一个工具栏，用户可以在窗口周围拖动工具栏来改变工具栏的方向。 </p>6.3.2 向JToolBar添加组件 
<p>一旦我们拥有一个JToolBar，我们需要向其中添加组件。任意的Component都可以添加到工具栏。当处理水平工具栏时，由于美观的原因，如果工具栏的组件是大致相同的高度时是最好的。对于垂直工具栏，如果工具栏组件具有大致相同的宽度则是最好的。JToolBar类只定义了一个方法用于添加工具栏项目；其他的方法，例如add(Component)是由Container继承而来的。另外，我们可以向工具栏添加分隔符。</p>
<div><font class="Apple-style-span" color="#0000ff">
<div id="codeText" class="codeText">
<ol style="padding-bottom: 5px; margin: 0px 1px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 5px" class="dp-css"><li><span style="color: #000000"><span style="color: #0000ff">public</span> <span style="color: #ff0000">JButton</span> <span style="color: #ff0000">add</span><span style="color: #0000cc">(</span><span style="color: #ff0000">Action</span> <span style="color: #ff0000">action</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span> <br /></span></li><li><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">addSeparator</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span> <br /></li><li><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">addSeparator</span><span style="color: #0000cc">(</span><span style="color: #ff0000">Dimension</span> <span style="color: #ff0000">size</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span></li></ol></div></font></div><br />
<p>当使用JToolBar的add(Action)方法时，所添加的Action被封闭在一个JButton对象中。这与向JMenu或是JPopupMenu组件添加Action不同，在后一种情况中，所添加的是JMenuItem对象。对于JMenu与JPopupMenu，以这种方式添加Action是类的Javadoc中所不推荐的。对于分隔符，如果我们没有指定尺寸，所安装的观感会强制默认的尺寸设置。 </p>
<p>由工具栏移除组件可以使用下面的方法：</p>
<div id="codeText" class="codeText">
<ol style="padding-bottom: 5px; margin: 0px 1px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 5px" class="dp-css"><li><span style="color: #000000"><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">remove</span><span style="color: #0000cc">(</span><span style="color: #ff0000">Component</span> <span style="color: #ff0000">component</span><span style="color: #0000cc">)</span></span></li></ol></div>
<div>&nbsp;6.3.3 JToolBar属性 
<p>表6-15列出了JToolBar所定义的9个属性。 </p>
<p>JToolBar属性 </p>
<table border="0" cellspacing="0" cellpadding="2" width="517">
<tbody>
<tr>
<td valign="top" width="176">属性名 <br /></td>
<td valign="top" width="209">数据类型 <br /></td>
<td valign="top" width="130">
<p>访问性 </p></td></tr>
<tr>
<td valign="top" width="176">accessibleContext <br /></td>
<td valign="top" width="209">AccessibleContext <br /></td>
<td valign="top" width="130">
<p>只读 </p></td></tr>
<tr>
<td valign="top" width="176">borderPainted <br /></td>
<td valign="top" width="209">boolean <br /></td>
<td valign="top" width="130">
<p>读写绑定 </p></td></tr>
<tr>
<td valign="top" width="176">floatable <br /></td>
<td valign="top" width="209">boolean <br /></td>
<td valign="top" width="130">
<p>读写绑定 </p></td></tr>
<tr>
<td valign="top" width="176">layout <br /></td>
<td valign="top" width="209">LayoutManager <br /></td>
<td valign="top" width="130">
<p>只写 </p></td></tr>
<tr>
<td valign="top" width="176">margin <br /></td>
<td valign="top" width="209">Insets <br /></td>
<td valign="top" width="130">
<p>读写绑定 </p></td></tr>
<tr>
<td valign="top" width="176">orientation <br /></td>
<td valign="top" width="209">int <br /></td>
<td valign="top" width="130">
<p>读写绑定 </p></td></tr>
<tr>
<td valign="top" width="176">rollover <br /></td>
<td valign="top" width="209">boolean <br /></td>
<td valign="top" width="130">
<p>读写绑定 </p></td></tr>
<tr>
<td valign="top" width="176">UI <br /></td>
<td valign="top" width="209">ToolBarUI <br /></td>
<td valign="top" width="130">
<p>读写 </p></td></tr>
<tr>
<td valign="top" width="176">UIClassID <br /></td>
<td valign="top" width="209">String <br /></td>
<td valign="top" width="130">
<p>只读 </p></td></tr></tbody></table>
<p>在默认情况下绘制JToolBar的边框。如果我们不希望绘制边框，我们可以将borderPainted属性设置为false。如果不使用borderPainted属性，我们需要修改border属性（由超类JComponent继承的属性）。 </p>
<p>orientation属性只可以设置为JToolBar的HORIZONTAL或是VERTICAL常量。如果使用其他的值，则会抛出IllegalArgumentException。修改方向会改变工具栏的布局管理器。如果我们通过setLayout()方法直接修改布局管理器，改变方向会撤销我们的布局管理器。 </p>
<p>正如前面所提到的，默认情况下工具栏是可浮动的。这就意味着用户可以拖动工具栏并放置在其他位置。要拖动工具栏，用户选择工具栏的空白部分。然后工具栏可以停留在原始的程序窗口，在主窗口内部浮动，或者是拖动到原始程序窗口的其他部分。如果原始窗口的布局管理器是BorderLayout，可拖动的部分是布局管理器无组件的边。（我们不能将工具栏放在窗口的中央。）否则，工具栏会被拖动到容器的最后一个点上。图6-10显示了拖动与停放过程的不同阶段。 </p>
<p>rollover属性定义了当用户在工具栏的不同组件上移动时与观感特定的行为。这种行为涉及到颜色与边框的不同。 </p>6.3.4 处理JToolBar事件 
<p>并没有特定于JToolBar的事件。我们需要将监听器关联到我们需要响应用户交互的JToolBar上的每一项上。当然，JToolBar是一个Container，所以我们也可以监听其事件。 </p>6.3.5 自定义JToolBar观感 
<p>每一个可安装的Swing观感都提供了其自己的JToolBar外观以及默认的UIResource值集合。外观的大部分是由工具栏中的实际组件控制的。图6-11显示了预安装的观感类型集合Motif，Windows以及Ocean的JToolBar组件外观。每一个工具栏都有五个JButton组件，在第四个与第五个组件之间有一个分隔符。 </p>
<p><a href="http://blog.chinaunix.net/attachment/201104/12/13670711_1302604791v6rL.png" target="_blank"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="swing_6_11" border="0" alt="swing_6_11" src="http://blog.chinaunix.net/attachment/201104/12/13670711_1302604794IbBm.png" width="640" height="378" /></a> </p>
<p>表6-16中列出了JToolBar的UIResource相关的属性。对于JToolBar组件，有22个不同的属性。 </p>
<p>JToolBar UIResource元素 </p>
<table style="width: 451px; height: 1042px" border="1" cellpadding="0">
<tbody>
<tr>
<td></td></tr>
<tr>
<td>
<p>属性字符串</p></td>
<td>
<p>对象类型</p></td></tr>
<tr>
<td>
<p>ToolBar.actionMap</p></td>
<td>
<p>ActionMap</p></td></tr>
<tr>
<td>
<p>ToolBar.ancestorInputMap</p></td>
<td>
<p>InputMap</p></td></tr>
<tr>
<td>
<p>ToolBar.background</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.border</p></td>
<td>
<p>Border</p></td></tr>
<tr>
<td>
<p>ToolBar.borderColor</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.darkShadow</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.dockingBackground</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.docingForeground</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.floatingBackground</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.floatingForeground</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.font</p></td>
<td>
<p>Font</p></td></tr>
<tr>
<td>
<p>ToolBar.foreground</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.handleIcon</p></td>
<td>
<p>Icon</p></td></tr>
<tr>
<td>
<p>ToolBar.highlight</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.isRollover</p></td>
<td>
<p>Boolean</p></td></tr>
<tr>
<td>
<p>ToolBar.light</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBar.nonrolloverBorder</p></td>
<td>
<p>Border</p></td></tr>
<tr>
<td>
<p>ToolBar.rolloverBorder</p></td>
<td>
<p>Border</p></td></tr>
<tr>
<td>
<p>ToolBar.separatorSize</p></td>
<td>
<p>Dimension</p></td></tr>
<tr>
<td>
<p>ToolBar.shadow</p></td>
<td>
<p>Color</p></td></tr>
<tr>
<td>
<p>ToolBarSeparatorUI</p></td>
<td>
<p>String</p></td></tr>
<tr>
<td>
<p>ToolBarUI</p></td>
<td>
<p>String</p></td></tr></tbody></table>6.3.6 完整的JToolBar使用示例 
<p>列表6-8演示了一个完整的JToolBar示例，这个程序生成了一个带有多个菱形按钮的工具栏。这个程序同时重用了本章前面列表6-2中为菜单示例所定义的ShowAction。 </p>
<p>在这个示例中允许了rollover属性以演示当前观感的不同。图6-12是我们在不同的按钮上移动鼠标时的输出结果。 </p>
<div><font class="Apple-style-span" color="#0000ff">
<div id="codeText" class="codeText">
<ol style="padding-bottom: 5px; margin: 0px 1px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 5px" class="dp-css"><li><span style="color: #000000"><span style="color: #0000ff">package</span> <span style="color: #ff0000">net</span><span style="color: #0000cc">.</span>ariel<span style="color: #0000cc">.</span>ch06<span style="color: #0000cc">;</span> <span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">BorderLayout</span><span style="color: #0000cc">;</span><br /></span></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">Container</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">EventQueue</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">event</span><span style="color: #0000cc">.</span><span style="color: #ff0000">ActionEvent</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">java</span><span style="color: #0000cc">.</span><span style="color: #ff0000">awt</span><span style="color: #0000cc">.</span><span style="color: #ff0000">event</span><span style="color: #0000cc">.</span><span style="color: #ff0000">ActionListener</span><span style="color: #0000cc">;</span> <span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">Action</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">Icon</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">JButton</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">JFrame</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">JScrollPane</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">JTextArea</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">import</span> <span style="color: #ff0000">javax</span><span style="color: #0000cc">.</span><span style="color: #ff0000">swing</span><span style="color: #0000cc">.</span><span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">;</span> <span style="color: #0000ff">import</span> <span style="color: #ff0000">net</span><span style="color: #0000cc">.</span>ariel<span style="color: #0000cc">.</span>ch04<span style="color: #0000cc">.</span>DiamondIcon<span style="color: #0000cc">;</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ToolBarSample <span style="color: #0000cc">{</span> <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> <span style="color: #0000ff">int</span> COLOR_POSITION <span style="color: #0000cc">=</span> 0<span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> <span style="color: #0000ff">int</span> STRING_POSITION <span style="color: #0000cc">=</span> 1<span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">static</span> <span style="color: #ff0000">Object</span> buttonColors<span style="color: #0000cc">[</span><span style="color: #0000cc">]</span><span style="color: #0000cc">[</span><span style="color: #0000cc">]</span> <span style="color: #0000cc">=</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">{</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">.</span>RED<span style="color: #0000cc">,</span> <span style="color: #ff00ff">"RED"</span><span style="color: #0000cc">}</span><span style="color: #0000cc">,</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">{</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">.</span>BLUE<span style="color: #0000cc">,</span> <span style="color: #ff00ff">"BLUE"</span><span style="color: #0000cc">}</span><span style="color: #0000cc">,</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">{</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">.</span>GREEN<span style="color: #0000cc">,</span> <span style="color: #ff00ff">"GREEN"</span><span style="color: #0000cc">}</span><span style="color: #0000cc">,</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">{</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">.</span>BLACK<span style="color: #0000cc">,</span> <span style="color: #ff00ff">"BLACK"</span><span style="color: #0000cc">}</span><span style="color: #0000cc">,</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">null</span><span style="color: #0000cc">,</span> <span style="color: #ff9900">// separator</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">{</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">.</span>CYAN<span style="color: #0000cc">,</span> <span style="color: #ff00ff">"CYAN"</span><span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><span style="color: #0000cc">;</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">class</span> TheActionListener <span style="color: #0000ff">implements</span> <span style="color: #ff0000">ActionListener</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">actionPerformed</span><span style="color: #0000cc">(</span><span style="color: #ff0000">ActionEvent</span> <span style="color: #ff0000">event</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">System</span><span style="color: #0000cc">.</span>out<span style="color: #0000cc">.</span><span style="color: #ff0000">println</span><span style="color: #0000cc">(</span><span style="color: #ff0000">event</span><span style="color: #0000cc">.</span><span style="color: #ff0000">getActionCommand</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff9900">/**<br /></span></li><li>&nbsp;&nbsp;&nbsp;&nbsp; * @param args<br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp; */<br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main<span style="color: #0000cc">(</span><span style="color: #ff0000">String</span><span style="color: #0000cc">[</span><span style="color: #0000cc">]</span> args<span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff9900">// TODO Auto-generated method stub Runnable runner = new Runnable() {</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">run</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">JFrame</span> <span style="color: #ff0000">frame</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JFrame</span><span style="color: #0000cc">(</span><span style="color: #ff00ff">"JToolBar Example"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">frame</span><span style="color: #0000cc">.</span><span style="color: #ff0000">setDefaultCloseOperation</span><span style="color: #0000cc">(</span><span style="color: #ff0000">JFrame</span><span style="color: #0000cc">.</span>EXIT_ON_CLOSE<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">ActionListener</span> <span style="color: #ff0000">actionListener</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> TheActionListener<span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span> <span style="color: #ff0000">JToolBar</span> toolbar <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toolbar<span style="color: #0000cc">.</span><span style="color: #ff0000">setRollover</span><span style="color: #0000cc">(</span>true<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span> <span style="color: #0000ff">for</span><span style="color: #0000cc">(</span><span style="color: #ff0000">Object</span><span style="color: #0000cc">[</span><span style="color: #0000cc">]</span> <span style="color: #ff0000">color</span><span style="color: #0000cc">:</span> buttonColors<span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span><span style="color: #0000cc">(</span><span style="color: #ff0000">color</span> <span style="color: #0000cc">=</span><span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toolbar<span style="color: #0000cc">.</span><span style="color: #ff0000">addSeparator</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">else</span> <span style="color: #0000cc">{</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">Icon</span> <span style="color: #ff0000">icon</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> DiamondIcon<span style="color: #0000cc">(</span><span style="color: #0000cc">(</span><span style="color: #ff0000">Color</span><span style="color: #0000cc">)</span><span style="color: #ff0000">color</span><span style="color: #0000cc">[</span>COLOR_POSITION<span style="color: #0000cc">]</span><span style="color: #0000cc">,</span> true<span style="color: #0000cc">,</span> 20<span style="color: #0000cc">,</span> 20<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">JButton</span> <span style="color: #ff0000">button</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JButton</span><span style="color: #0000cc">(</span><span style="color: #ff0000">icon</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">button</span><span style="color: #0000cc">.</span><span style="color: #ff0000">setActionCommand</span><span style="color: #0000cc">(</span><span style="color: #0000cc">(</span><span style="color: #ff0000">String</span><span style="color: #0000cc">)</span><span style="color: #ff0000">color</span><span style="color: #0000cc">[</span>STRING_POSITION<span style="color: #0000cc">]</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">button</span><span style="color: #0000cc">.</span><span style="color: #ff0000">addActionListener</span><span style="color: #0000cc">(</span><span style="color: #ff0000">actionListener</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toolbar<span style="color: #0000cc">.</span><span style="color: #ff0000">add</span><span style="color: #0000cc">(</span><span style="color: #ff0000">button</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">Action</span> <span style="color: #ff0000">action</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> ShowAction<span style="color: #0000cc">(</span><span style="color: #ff0000">frame</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">JButton</span> <span style="color: #ff0000">button</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JButton</span><span style="color: #0000cc">(</span><span style="color: #ff0000">action</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toolbar<span style="color: #0000cc">.</span><span style="color: #ff0000">add</span><span style="color: #0000cc">(</span><span style="color: #ff0000">button</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span> <span style="color: #ff0000">Container</span> contentPane <span style="color: #0000cc">=</span> <span style="color: #ff0000">frame</span><span style="color: #0000cc">.</span><span style="color: #ff0000">getContentPane</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentPane<span style="color: #0000cc">.</span><span style="color: #ff0000">add</span><span style="color: #0000cc">(</span>toolbar<span style="color: #0000cc">,</span> <span style="color: #ff0000">BorderLayout</span><span style="color: #0000cc">.</span>NORTH<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">JTextArea</span> <span style="color: #ff0000">textArea</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JTextArea</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">JScrollPane</span> pane <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JScrollPane</span><span style="color: #0000cc">(</span><span style="color: #ff0000">textArea</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentPane<span style="color: #0000cc">.</span><span style="color: #ff0000">add</span><span style="color: #0000cc">(</span>pane<span style="color: #0000cc">,</span> <span style="color: #ff0000">BorderLayout</span><span style="color: #0000cc">.</span>CENTER<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">frame</span><span style="color: #0000cc">.</span><span style="color: #ff0000">setSize</span><span style="color: #0000cc">(</span>350<span style="color: #0000cc">,</span> 150<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">frame</span><span style="color: #0000cc">.</span><span style="color: #ff0000">setVisible</span><span style="color: #0000cc">(</span>true<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">EventQueue</span><span style="color: #0000cc">.</span><span style="color: #ff0000">invokeLater</span><span style="color: #0000cc">(</span>runner<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span> <span style="color: #0000cc">}</span></li></ol></div></font></div><br />6.3.7 JToolBar.Separator类 
<p>JToolBar维护其自己的分隔符从而允许自定义JToolBar上的分隔符的观感。 </p>
<p>这个分隔符是我们调用JToolBar的addSeparator()方法时自动创建的。另外，如果我们希望手动创建这个组件，则有两个方法可以创建JToolBar.Separator。</p>
<div><font class="Apple-style-span" color="#0000ff">
<div id="codeText" class="codeText">
<ol style="padding-bottom: 5px; margin: 0px 1px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 5px" class="dp-css"><li><span style="color: #000000"><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">.</span>Separator<span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><br /></span></li><li><span style="color: #ff0000">JSeparator</span> toolBarSeparator <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">.</span>Separator<span style="color: #0000cc">(</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #0000ff">public</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">.</span>Separator<span style="color: #0000cc">(</span><span style="color: #ff0000">Dimension</span> <span style="color: #ff0000">size</span><span style="color: #0000cc">)</span><br /></li><li><span style="color: #ff0000">Dimension</span> <span style="color: #ff0000">dimension</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">Dimension</span><span style="color: #0000cc">(</span>10<span style="color: #0000cc">,</span> 10<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br /></li><li><span style="color: #ff0000">JSeparator</span> toolBarSeparator <span style="color: #0000cc">=</span> <span style="color: #0000ff">new</span> <span style="color: #ff0000">JToolBar</span><span style="color: #0000cc">.</span>Separator<span style="color: #0000cc">(</span><span style="color: #ff0000">dimension</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span></li></ol></div></font></div><br />
<p>这两个构造函数都创建一个水平分隔符。我们可以配置其尺寸。如果我们没有指定尺寸，观感类型会决定分隔符的尺寸。 </p>
<p>与JPopupMenu.Separator类似，如果我们希望修改分隔符的方向，我们必须调用由JSeparator所继承的setOrientation()方法，此时的参数为JToolBar.Separator.VERTICAL。 </p>6.4 小结 
<p>本章介绍了许多Swing菜单相关的类及其内部关系，以及Swing工具栏类。首先，我们了解了JMenuBar及其选择模型，并且了解了菜单栏如何应用在Applets以及程序中。 </p>
<p>接下来，我们探讨了JMenuItem，这是用户选择的菜单元素，以及系统用来处理事件的两个新的事件/监听器对，MenuKeyEvent/MenuKeyListener以及MenuDragMouseEvent/MenuDragMouseListener。然后，我们探讨了JMenu组件，这是JMenuItem实放置的地方，及其新的事件/监听器对，MenuEvent/MenuListener，这可以用来确定菜单何时将会发送。 </p>
<p>接下来，我们了解了JSeparator组件以及我们如何可以将其作为一个菜单分隔符或是菜单外的可视分隔符。 </p>
<p>然后我们探讨了JPopupMenu，JMenu用其来显示其JMenuItem组件集合。对于JPopupMenu，我们了解了弹出菜单自己的事件/监听器对，PopupMenuEvent/PopupMenuListener。 </p>
<p>然后我们探讨了JCheckBoxMenuItem与JRadioButtonMenuItem中的可选择的菜单元素，以及MenuElement接口，同时我们了解了如何创建自定义的菜单组件。 </p>
<p>菜单并不是唯一可以弹出的内容，所以我们探讨了Popup与PopupFactory。最后，本章探讨了JToolBar类。 </p>
<p>在第7章中，我们将会了解Swing提供的用来自定义Swing组件周围边框的不同类。</p></div>
<p><br />转自： <a href="http://blog.chinaunix.net/uid-13670711-id-224264.html">http://blog.chinaunix.net/uid-13670711-id-224264.html</a></p></div><img src ="http://www.cppblog.com/LIULIANG/aggbug/176187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-05-25 22:20 <a href="http://www.cppblog.com/LIULIANG/archive/2012/05/25/176187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BIRT 安装指南</title><link>http://www.cppblog.com/LIULIANG/archive/2012/05/21/175584.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Mon, 21 May 2012 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/05/21/175584.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/175584.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/05/21/175584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/175584.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/175584.html</trackback:ping><description><![CDATA[ 查看：   http://www.iocblog.net/project/birt/birt-62.html<img src ="http://www.cppblog.com/LIULIANG/aggbug/175584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-05-21 12:52 <a href="http://www.cppblog.com/LIULIANG/archive/2012/05/21/175584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server JDBC驱动中sqljdbc和sqljdbc4区别</title><link>http://www.cppblog.com/LIULIANG/archive/2012/05/18/175295.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Fri, 18 May 2012 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/05/18/175295.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/175295.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/05/18/175295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/175295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/175295.html</trackback:ping><description><![CDATA[<div class="brieftext">
<p class="f14 green"><span style="color: #ff0000">&nbsp; 为了支持向后兼容以及可能的升级方案，JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库：sqljdbc.jar 和 sqljdbc4.jar。本文将介绍SQL Server JDBC驱动中sqljdbc和sqljdbc4的区别。</span></p></div>
<div style="display: none" id="indexlist" class="tag bgF8F8F8">
<ul id="indexliststr"></ul><br class="dle" /></div>
<div class="content bgF8F8F8 f14">
<div id="content">
<p>
<p>sqljdbc.jar 类库提供对JDBC 3.0 的支持。</p>
<p>sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时，在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。</p>
<p>注意： SQL Server JDBC Driver 2.0 不支持 JRE 1.4。使用 SQL Server JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下，您可能需要重新编译应用程序，因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息，请参阅 Sun Microsystems 网站上的文档。</p>
<p>sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能，还包括新增的 JDBC 4.0 方法。</p>
<p>sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。<br />注意： 如果应用程序必须在 JRE 6.0 上运行，即使该应用程序不使用 JDBC 4.0 功能，也应使用 sqljdbc4.jar。</p>
<p>请注意，尽管驱动程序旨在与所有主要的 Sun 等效 Java 虚拟机一起工作并由这些虚拟机支持，但却是在 Sun JRE 5.0 或更高版本上进行测试的。</p>
<p>SQL Server JDBC Driver 专为使用 SQL Server 2005 引入的功能而设计，但它也可以向后兼容 SQL Server 2000（包括 64 位版本）。</p>
<p>重要提示： Microsoft SQL Server JDBC Driver 2.0 可以连接到 SQL Server 2008，但不完全支持 SQL Server 2008 中新引入的数据类型或其他功能。<br /><br />转自：<a href="http://developer.51cto.com/art/200907/137813.htm">http://developer.51cto.com/art/200907/137813.htm</a></p></div></div><img src ="http://www.cppblog.com/LIULIANG/aggbug/175295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-05-18 14:10 <a href="http://www.cppblog.com/LIULIANG/archive/2012/05/18/175295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/04/30/173213.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Mon, 30 Apr 2012 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/04/30/173213.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/173213.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/04/30/173213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/173213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/173213.html</trackback:ping><description><![CDATA[<p>1、打开Eclipse软件，选择菜单栏run,在二级菜单中选择 Debug Configurations...&nbsp; 项，如下图所示。</p>
<p>&nbsp;<img alt="" src="http://album.hi.csdn.net/app_uploads/gavin8197/20081210/175912721.p.jpg?d=20081215164015984" width="389" height="240" /></p>
<p>&nbsp;</p>
<p>2、在弹出的窗口中选择 (x)=Arguments 选项卡，VM arguments 输入框中输入所需要的内存最大占用量，我这里输入的是800兆。最后点击Apply按钮即可。</p>
<p>&nbsp;<img alt="" src="http://album.hi.csdn.net/app_uploads/gavin8197/20081215/165034312.p.jpg?d=20081215165042890" width="599" height="477" /></p>
<p>&nbsp;</p>
<p>【附】MyEclipse的设置地址在run---&gt;Open Run Dialog---&gt;Arguments</p>
<p>&nbsp;</p>转自：<a href="http://www.cnblogs.com/sishierfei/archive/2010/03/19/1689511.html">http://www.cnblogs.com/sishierfei/archive/2010/03/19/1689511.html</a><img src ="http://www.cppblog.com/LIULIANG/aggbug/173213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-04-30 09:13 <a href="http://www.cppblog.com/LIULIANG/archive/2012/04/30/173213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jxl读取excel文件操作</title><link>http://www.cppblog.com/LIULIANG/archive/2012/04/23/172508.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Mon, 23 Apr 2012 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/04/23/172508.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/172508.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/04/23/172508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/172508.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/172508.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在进行测试之前，首先在网上下载jxl.jar文件，放到classpath路径下或者放到你的工程中（效果一样，其实就是要在classpath能够找到这个jar包）好了，下面现在开始做例子第一步：创建excel文件 CreateExcel.java[java]&nbsp;view plaincopyprint?&lt;pre&nbsp;name="code"&nbsp;class="java"&gt;...&nbsp;&nbsp;<a href='http://www.cppblog.com/LIULIANG/archive/2012/04/23/172508.html'>阅读全文</a><img src ="http://www.cppblog.com/LIULIANG/aggbug/172508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-04-23 23:16 <a href="http://www.cppblog.com/LIULIANG/archive/2012/04/23/172508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中字符串 MD5密码的加密与验证</title><link>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170427.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sun, 08 Apr 2012 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170427.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/170427.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/170427.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/170427.html</trackback:ping><description><![CDATA[<strong>&nbsp;&nbsp;MD5</strong>即Message-Digest Algorithm 5（信息-摘要<a href="http://writeblog.csdn.net/view/7420.htm" target="_blank">算法</a> 5），用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一（又译<strong>摘要算法</strong>、哈希算法），主流编程语言普遍已有MD5实现。<br />
<p>　　 将<a href="http://writeblog.csdn.net/view/38752.htm" target="_blank">数据</a>（如汉字）运算为另一固定长度值是杂凑算法的基础原理，MD5的前身有MD2、<a href="http://writeblog.csdn.net/view/2535629.htm" target="_blank">MD3</a>和<a href="http://writeblog.csdn.net/view/444142.htm" target="_blank">MD4</a>。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本实例介绍用MD5进行加密和验证，将输入字符串通过MD5加密成另一个字符串，而且根据新的字符串无法获得原字符串，但可以在不知道原始密码的情况下进行密码验证。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: large"><font size="4">关键技术：</font></span></strong></p>
<p>*通过java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要，参数为算法名，传入&#8220;MD5&#8221;则表示将使用MD5算法。</p>
<p>*MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新，然后完成摘要计算，返回存放哈希值结果的季节数组，这个数组就是MD5加密产品。</p>
<p>*将加密后的字节数组转换成十六进制的字符窜，形成最终的密码。</p>
<p>*当输入字符串经过MD5加密后，得到的字符串与密码一样，则认为密码验证通过。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: large"><font size="4">实例演示：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.security.MessageDigest;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_64_2383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_2383_Open_Text.style.display='none'; Codehighlighter1_64_2383_Closed_Image.style.display='inline'; Codehighlighter1_64_2383_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_64_2383_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_64_2383_Closed_Text.style.display='none'; Codehighlighter1_64_2383_Open_Image.style.display='inline'; Codehighlighter1_64_2383_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Password&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_64_2383_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_64_2383_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">16进制下数字到字符的映射数组&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img id="Codehighlighter1_145_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_209_Open_Text.style.display='none'; Codehighlighter1_145_209_Closed_Image.style.display='inline'; Codehighlighter1_145_209_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_145_209_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_145_209_Closed_Text.style.display='none'; Codehighlighter1_145_209_Open_Image.style.display='inline'; Codehighlighter1_145_209_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String[]&nbsp;hexDigits&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_145_209_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_145_209_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">5</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">6</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">7</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">8</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">9</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">b</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">c</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">d</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">e</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">f</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将inputstr加密&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;createPassword(String&nbsp;inputstr)&nbsp;&nbsp;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_301_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_349_Open_Text.style.display='none'; Codehighlighter1_301_349_Closed_Image.style.display='inline'; Codehighlighter1_301_349_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_301_349_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_301_349_Closed_Text.style.display='none'; Codehighlighter1_301_349_Open_Image.style.display='inline'; Codehighlighter1_301_349_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_301_349_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_301_349_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;encodeByMD5(inputstr);&nbsp;&nbsp;<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">验证密码是否正确&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">15</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;authenticatePassword(String&nbsp;pass&nbsp;,&nbsp;String&nbsp;inputstr)&nbsp;&nbsp;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_458_640_Open_Image" onclick="this.style.display='none'; Codehighlighter1_458_640_Open_Text.style.display='none'; Codehighlighter1_458_640_Closed_Image.style.display='inline'; Codehighlighter1_458_640_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_458_640_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_458_640_Closed_Text.style.display='none'; Codehighlighter1_458_640_Open_Image.style.display='inline'; Codehighlighter1_458_640_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_458_640_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_458_640_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(pass.equals((encodeByMD5(inputstr))))&nbsp;&nbsp;<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_521_560_Open_Image" onclick="this.style.display='none'; Codehighlighter1_521_560_Open_Text.style.display='none'; Codehighlighter1_521_560_Closed_Image.style.display='inline'; Codehighlighter1_521_560_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_521_560_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_521_560_Closed_Text.style.display='none'; Codehighlighter1_521_560_Open_Image.style.display='inline'; Codehighlighter1_521_560_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_521_560_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_521_560_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_589_631_Open_Image" onclick="this.style.display='none'; Codehighlighter1_589_631_Open_Text.style.display='none'; Codehighlighter1_589_631_Closed_Image.style.display='inline'; Codehighlighter1_589_631_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_589_631_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_589_631_Closed_Text.style.display='none'; Codehighlighter1_589_631_Open_Image.style.display='inline'; Codehighlighter1_589_631_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_589_631_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_589_631_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">对字符串进行MD5编码&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">27</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;encodeByMD5(String&nbsp;originstr)&nbsp;&nbsp;<br /></span><span style="color: #008080">28</span><span style="color: #000000"><img id="Codehighlighter1_730_1330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_730_1330_Open_Text.style.display='none'; Codehighlighter1_730_1330_Closed_Image.style.display='inline'; Codehighlighter1_730_1330_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_730_1330_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_730_1330_Closed_Text.style.display='none'; Codehighlighter1_730_1330_Open_Image.style.display='inline'; Codehighlighter1_730_1330_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_730_1330_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_730_1330_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(originstr&nbsp;</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;&nbsp;<br /></span><span style="color: #008080">30</span><span style="color: #000000"><img id="Codehighlighter1_775_1298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_775_1298_Open_Text.style.display='none'; Codehighlighter1_775_1298_Closed_Image.style.display='inline'; Codehighlighter1_775_1298_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_775_1298_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_775_1298_Closed_Text.style.display='none'; Codehighlighter1_775_1298_Open_Image.style.display='inline'; Codehighlighter1_775_1298_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_775_1298_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_775_1298_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">31</span><span style="color: #000000"><img id="Codehighlighter1_795_1207_Open_Image" onclick="this.style.display='none'; Codehighlighter1_795_1207_Open_Text.style.display='none'; Codehighlighter1_795_1207_Closed_Image.style.display='inline'; Codehighlighter1_795_1207_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_795_1207_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_795_1207_Closed_Text.style.display='none'; Codehighlighter1_795_1207_Open_Image.style.display='inline'; Codehighlighter1_795_1207_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_795_1207_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_795_1207_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建具有指定算法名称的信息摘要&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">33</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;md&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageDigest.getInstance(</span><span style="color: #000000">"</span><span style="color: #000000">MD5</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;<br /></span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">使用指定的字节数组对摘要进行最后的更新，然后完成摘要计算&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">35</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;results&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;md.digest(originstr.getBytes());&nbsp;&nbsp;<br /></span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将得到的字节数组编程字符窜返回&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">37</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resultString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;byteArrayToHexString(results);&nbsp;&nbsp;<br /></span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;resultString.toUpperCase();&nbsp;&nbsp;<br /></span><span style="color: #008080">39</span><span style="color: #000000"><img id="Codehighlighter1_1227_1285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1227_1285_Open_Text.style.display='none'; Codehighlighter1_1227_1285_Closed_Image.style.display='inline'; Codehighlighter1_1227_1285_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1227_1285_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1227_1285_Closed_Text.style.display='none'; Codehighlighter1_1227_1285_Open_Image.style.display='inline'; Codehighlighter1_1227_1285_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;ex)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1227_1285_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1227_1285_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();&nbsp;&nbsp;<br /></span><span style="color: #008080">41</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">42</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">43</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">44</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">转换字节数组为十六进制字符串&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">46</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;byteArrayToHexString(</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;b)&nbsp;&nbsp;<br /></span><span style="color: #008080">47</span><span style="color: #000000"><img id="Codehighlighter1_1423_1654_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1423_1654_Open_Text.style.display='none'; Codehighlighter1_1423_1654_Closed_Image.style.display='inline'; Codehighlighter1_1423_1654_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1423_1654_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1423_1654_Closed_Text.style.display='none'; Codehighlighter1_1423_1654_Open_Image.style.display='inline'; Codehighlighter1_1423_1654_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1423_1654_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1423_1654_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">48</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;resultsb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer();&nbsp;&nbsp;<br /></span><span style="color: #008080">49</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">50</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">b.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;<br /></span><span style="color: #008080">51</span><span style="color: #000000"><img id="Codehighlighter1_1542_1608_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1542_1608_Open_Text.style.display='none'; Codehighlighter1_1542_1608_Closed_Image.style.display='inline'; Codehighlighter1_1542_1608_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1542_1608_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1542_1608_Closed_Text.style.display='none'; Codehighlighter1_1542_1608_Open_Image.style.display='inline'; Codehighlighter1_1542_1608_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1542_1608_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1542_1608_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">52</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultsb.append(byteToHexString(b[i]));&nbsp;&nbsp;<br /></span><span style="color: #008080">53</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">54</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;resultsb.toString();&nbsp;&nbsp;<br /></span><span style="color: #008080">55</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">56</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将字节转化成十六进制的字符串&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">57</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;byteToHexString(</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;b)&nbsp;&nbsp;<br /></span><span style="color: #008080">58</span><span style="color: #000000"><img id="Codehighlighter1_1738_1937_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1738_1937_Open_Text.style.display='none'; Codehighlighter1_1738_1937_Closed_Image.style.display='inline'; Codehighlighter1_1738_1937_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1738_1937_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1738_1937_Closed_Text.style.display='none'; Codehighlighter1_1738_1937_Open_Image.style.display='inline'; Codehighlighter1_1738_1937_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1738_1937_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1738_1937_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">59</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">60</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n</span><span style="color: #000000">=</span><span style="color: #000000">b;&nbsp;&nbsp;<br /></span><span style="color: #008080">61</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(n</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;&nbsp;<br /></span><span style="color: #008080">62</span><span style="color: #000000"><img id="Codehighlighter1_1791_1830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1791_1830_Open_Text.style.display='none'; Codehighlighter1_1791_1830_Closed_Image.style.display='inline'; Codehighlighter1_1791_1830_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1791_1830_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1791_1830_Closed_Text.style.display='none'; Codehighlighter1_1791_1830_Open_Image.style.display='inline'; Codehighlighter1_1791_1830_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1791_1830_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1791_1830_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">63</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">256</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n;&nbsp;&nbsp;<br /></span><span style="color: #008080">64</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">65</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;d1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">66</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;d2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">16</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">67</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;hexDigits[d1]</span><span style="color: #000000">+</span><span style="color: #000000">hexDigits[d2];&nbsp;&nbsp;<br /></span><span style="color: #008080">68</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">69</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">70</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;&nbsp;<br /></span><span style="color: #008080">71</span><span style="color: #000000"><img id="Codehighlighter1_1993_2379_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1993_2379_Open_Text.style.display='none'; Codehighlighter1_1993_2379_Closed_Image.style.display='inline'; Codehighlighter1_1993_2379_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1993_2379_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1993_2379_Closed_Text.style.display='none'; Codehighlighter1_1993_2379_Open_Image.style.display='inline'; Codehighlighter1_1993_2379_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1993_2379_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1993_2379_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br /></span><span style="color: #008080">72</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Password.createPassword(</span><span style="color: #000000">"</span><span style="color: #000000">123456</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;<br /></span><span style="color: #008080">73</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">对123456用MD5加密后：</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">password);&nbsp;&nbsp;<br /></span><span style="color: #008080">74</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;inputstr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">75</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">1234与密码相同？</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">Password.authenticatePassword(password,&nbsp;inputstr));&nbsp;&nbsp;<br /></span><span style="color: #008080">76</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputstr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">123456</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">77</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">123456与密码相同？</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">Password.authenticatePassword(password,&nbsp;inputstr));&nbsp;&nbsp;<br /></span><span style="color: #008080">78</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">79</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<p><br />转自：<a href="http://blog.csdn.net/jay314159/article/details/4918358">http://blog.csdn.net/jay314159/article/details/4918358</a></font></span></strong></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/170427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-04-08 11:00 <a href="http://www.cppblog.com/LIULIANG/archive/2012/04/08/170427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中byte与16进制字符串的互相转换 </title><link>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170426.html</link><dc:creator>BIG森林</dc:creator><author>BIG森林</author><pubDate>Sun, 08 Apr 2012 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170426.html</guid><wfw:comment>http://www.cppblog.com/LIULIANG/comments/170426.html</wfw:comment><comments>http://www.cppblog.com/LIULIANG/archive/2012/04/08/170426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/LIULIANG/comments/commentRss/170426.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/LIULIANG/services/trackbacks/170426.html</trackback:ping><description><![CDATA[Java中byte用二进制表示占用8位，而我们知道16进制的每个字符需要用4位二进制位来表示（23 + 22 + 21 + 20 = 15），所以我们就可以把每个byte转换成两个相应的16进制字符，即把byte的高4位和低4位分别转换成相应的16进制字符H和L，并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占2位。 
<p>同理，相反的转换也是将两个16进制字符转换成一个byte，原理同上。</p>
<p>根据以上原理，我们就可以将byte[] 数组转换为16进制字符串了，当然也可以将16进制字符串转换为byte[]数组了。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">/**</span></p>
<p><span style="color: #ff0000">Java代码&nbsp; </span><br /><span style="color: #ff0000">1. * Convert byte[] to hex string.这里我们可以将byte转换成int，然后利用Integer.toHexString(int)来转换成16进制字符串。&nbsp;&nbsp; </span><br /><span style="color: #ff0000">2. * @param src byte[] data&nbsp;&nbsp; </span><br /><span style="color: #ff0000">3. * @return hex string&nbsp;&nbsp; </span><br /><span style="color: #ff0000">4. */&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">5.public static String bytesToHexString(byte[] src){&nbsp;&nbsp; </span><br /><span style="color: #ff0000">6.&nbsp;&nbsp;&nbsp; StringBuilder stringBuilder = new StringBuilder("");&nbsp;&nbsp; </span><br /><span style="color: #ff0000">7.&nbsp;&nbsp;&nbsp; if (src == null || src.length &lt;= 0) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">9.&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">10.&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; src.length; i++) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int v = src[i] &amp; 0xFF;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hv = Integer.toHexString(v);&nbsp;&nbsp; </span><br /><span style="color: #ff0000">13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hv.length() &lt; 2) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">14.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringBuilder.append(0);&nbsp;&nbsp; </span><br /><span style="color: #ff0000">15.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">16.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringBuilder.append(hv);&nbsp;&nbsp; </span><br /><span style="color: #ff0000">17.&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">18.&nbsp;&nbsp;&nbsp; return stringBuilder.toString();&nbsp;&nbsp; </span><br /><span style="color: #ff0000">19.}&nbsp;&nbsp; </span><br /><span style="color: #ff0000">20./**&nbsp; </span><br /><span style="color: #ff0000">21. * Convert hex string to byte[]&nbsp; </span><br /><span style="color: #ff0000">22. * @param hexString the hex string&nbsp; </span><br /><span style="color: #ff0000">23. * @return byte[]&nbsp; </span><br /><span style="color: #ff0000">24. */&nbsp; </span><br /><span style="color: #ff0000">25.public static byte[] hexStringToBytes(String hexString) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">26.&nbsp;&nbsp;&nbsp; if (hexString == null || hexString.equals("")) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">27.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">28.&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">29.&nbsp;&nbsp;&nbsp; hexString = hexString.toUpperCase();&nbsp;&nbsp; </span><br /><span style="color: #ff0000">30.&nbsp;&nbsp;&nbsp; int length = hexString.length() / 2;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">31.&nbsp;&nbsp;&nbsp; char[] hexChars = hexString.toCharArray();&nbsp;&nbsp; </span><br /><span style="color: #ff0000">32.&nbsp;&nbsp;&nbsp; byte[] d = new byte[length];&nbsp;&nbsp; </span><br /><span style="color: #ff0000">33.&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; length; i++) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">34.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pos = i * 2;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">35.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d[i] = (byte) (charToByte(hexChars[pos]) &lt;&lt; 4 | charToByte(hexChars[pos + 1]));&nbsp;&nbsp; </span><br /><span style="color: #ff0000">36.&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">37.&nbsp;&nbsp;&nbsp; return d;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">38.}&nbsp;&nbsp; </span><br /><span style="color: #ff0000">39./**&nbsp; </span><br /><span style="color: #ff0000">40. * Convert char to byte&nbsp; </span><br /><span style="color: #ff0000">41. * @param c char&nbsp; </span><br /><span style="color: #ff0000">42. * @return byte&nbsp; </span><br /><span style="color: #ff0000">43. */&nbsp; </span><br /><span style="color: #ff0000">44. private byte charToByte(char c) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">45.&nbsp;&nbsp;&nbsp; return (byte) "0123456789ABCDEF".indexOf(c);&nbsp;&nbsp; </span><br /><span style="color: #ff0000">46.}&nbsp; </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * Convert byte[] to hex string.这里我们可以将byte转换成int，然后利用Integer.toHexString(int)来转换成16进制字符串。</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @param src byte[] data</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @return hex string</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp; </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; public static String bytesToHexString(byte[] src){</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder stringBuilder = new StringBuilder("");</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (src == null || src.length &lt;= 0) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; src.length; i++) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int v = src[i] &amp; 0xFF;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hv = Integer.toHexString(v);</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hv.length() &lt; 2) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringBuilder.append(0);</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringBuilder.append(hv);</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return stringBuilder.toString();</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; /**</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * Convert hex string to byte[]</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @param hexString the hex string</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @return byte[]</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; public static byte[] hexStringToBytes(String hexString) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (hexString == null || hexString.equals("")) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hexString = hexString.toUpperCase();</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int length = hexString.length() / 2;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[] hexChars = hexString.toCharArray();</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] d = new byte[length];</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; length; i++) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pos = i * 2;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d[i] = (byte) (charToByte(hexChars[pos]) &lt;&lt; 4 | charToByte(hexChars[pos + 1]));</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return d;</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; }</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; /**</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * Convert char to byte</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @param c char</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; * @return byte</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; private byte charToByte(char c) {</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (byte) "0123456789ABCDEF".indexOf(c);</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp; }<br /><br /></span><br />Java代码&nbsp; <br /><span style="color: #ff0000">1.//将指定byte数组以16进制的形式打印到控制台&nbsp;&nbsp; </span><br /><span style="color: #ff0000">2.public static void printHexString( byte[] b) {&nbsp;&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">3.&nbsp;&nbsp; for (int i = 0; i &lt; b.length; i++) {&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">4.&nbsp;&nbsp;&nbsp;&nbsp; String hex = Integer.toHexString(b[i] &amp; 0xFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<font color="#ff0000">b[i] 和0xFF进行与运算（<font color="#ff0000">0xFF</font>默认是int型，二进制位00000000 <font color="#ff0000">00000000</font> <font color="#ff0000">00000000</font> <font color="#ff0000">11111111</font>）</font></span><br /><span style="color: #ff0000">5.&nbsp;&nbsp;&nbsp;&nbsp; if (hex.length() == 1) {&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hex = '0' + hex;&nbsp;&nbsp;&nbsp; //高四位置为0</span><br /><span style="color: #ff0000">7.&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">8.&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(hex.toUpperCase() );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将十六进制个字符转换为大写输出到控制台</span><br /><span style="color: #ff0000">9.&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">10.&nbsp; </span><br /><span style="color: #ff0000">11.}&nbsp; </span><br /><br /><br />//将指定byte数组以16进制的形式打印到控制台<br /><span style="color: #ff0000">public static void printHexString( byte[] b) {&nbsp; </span><br /><span style="color: #ff0000">&nbsp;&nbsp; for (int i = 0; i &lt; b.length; i++) { </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; String hex = Integer.toHexString(b[i] &amp; 0xFF); </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; if (hex.length() == 1) { </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hex = '0' + hex; </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; } </span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(hex.toUpperCase() ); </span><br /><span style="color: #ff0000">&nbsp;&nbsp; } </span></p>
<p><span style="color: #ff0000">} </span></p>
<p>java中byte转换int时为何与0xff进行与运算 </p>
<p>在剖析该问题前请看如下代码</p>
<p>Java代码&nbsp; <br /><span style="color: #ff0000">1.public static String bytes2HexString(byte[] b) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">2.&nbsp; String ret = "";&nbsp;&nbsp; </span><br /><span style="color: #ff0000">3.&nbsp; for (int i = 0; i &lt; b.length; i++) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">4.&nbsp;&nbsp; String hex = Integer.toHexString(b[ i ] &amp; 0xFF);&nbsp;&nbsp; </span><br /><span style="color: #ff0000">5.&nbsp;&nbsp; if (hex.length() == 1) {&nbsp;&nbsp; </span><br /><span style="color: #ff0000">6.&nbsp;&nbsp;&nbsp; hex = '0' + hex;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">7.&nbsp;&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">8.&nbsp;&nbsp; ret += hex.toUpperCase();&nbsp;&nbsp; </span><br /><span style="color: #ff0000">9.&nbsp; }&nbsp;&nbsp; </span><br /><span style="color: #ff0000">10.&nbsp; return ret;&nbsp;&nbsp; </span><br /><span style="color: #ff0000">11.}&nbsp; </span><br />上面是将byte[]转化十六进制的字符串,注意这里b[ i ] &amp; 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出<br />b[ i ] &amp; 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.</p>
<p>其原因在于:<br />1.byte的大小为8bits而int的大小为32bits<br />2.java的二进制采用的是补码形式</p>
<p>在这里先温习下计算机基础理论</p>
<p>byte是一个字节保存的，有8个位，即8个0、1。<br />8位的第一个位是符号位， <br />也就是说0000 0001代表的是数字1 <br />1000 0000代表的就是-1 <br />所以正数最大位0111 1111，也就是数字127 <br />负数最大为1111 1111，也就是数字-128</p>
<p>上面说的是二进制原码，但是在java中采用的是补码的形式，下面介绍下什么是补码</p>
<p>1、反码：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个数如果是正，则它的反码与原码相同；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个数如果是负，则符号位为1，其余各位是对原码取反；</p>
<p>2、补码：利用溢出，我们可以将减法变成加法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于十进制数，从9得到5可用减法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9－4＝5&nbsp;&nbsp;&nbsp; 因为4+6＝10，我们可以将6作为4的补数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改写为加法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9+6＝15（去掉高位1，也就是减10）得到5.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于十六进制数，从c到5可用减法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c－7＝5&nbsp;&nbsp;&nbsp; 因为7+9＝16 将9作为7的补数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改写为加法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c+9＝15（去掉高位1，也就是减16）得到5.</p>
<p>&nbsp;&nbsp;&nbsp; 在计算机中，如果我们用1个字节表示一个数，一个字节有8位，超过8位就进1，在内存中情况为（100000000），进位1被丢弃。</p>
<p>&nbsp;&nbsp;&nbsp; &#9332;一个数为正，则它的原码、反码、补码相同<br />&nbsp;&nbsp;&nbsp; &#9333;一个数为负，刚符号位为1，其余各位是对原码取反，然后整个数加1<br />&nbsp;&nbsp;&nbsp; <br />- 1的原码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000001<br />- 1的反码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11111110<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + 1<br />- 1的补码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11111111</p>
<p>0的原码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000<br />0的反码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11111111（正零和负零的反码相同）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +1<br />0的补码为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100000000（舍掉打头的1，正零和负零的补码相同）</p>
<p>Integer.toHexString的参数是int，如果不进行&amp;0xff，那么当一个byte会转换成int时，由于int是32位，而byte只有8位这时会进行补位，<br />例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊，呵呵！即0xffffffff但是这个数是不对的，这种补位就会造成误差。<br />和0xff相与后，高24比特就会被清0了，结果就对了。</p>
<p>----<br />Java中的一个byte，其范围是-128~127的，而Integer.toHexString的参数本来是int，如果不进行&amp;0xff，那么当一个byte会转换成int时，对于负数，会做位扩展，举例来说，一个byte的-1（即0xff），会被转换成int的-1（即0xffffffff），那么转化出的结果就不是我们想要的了。</p>
<p>而0xff默认是整形，所以，一个byte跟0xff相与会先将那个byte转化成整形运算，这样，结果中的高的24个比特就总会被清0，于是结果总是我们想要的。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000"><strong>转自：<a href="http://franksinger.iteye.com/blog/614540">http://franksinger.iteye.com/blog/614540</a></strong></span></p><img src ="http://www.cppblog.com/LIULIANG/aggbug/170426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/LIULIANG/" target="_blank">BIG森林</a> 2012-04-08 10:57 <a href="http://www.cppblog.com/LIULIANG/archive/2012/04/08/170426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>