﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-六月天-随笔分类-j2se开发</title><link>http://www.blogjava.net/hiswing/category/13506.html</link><description>关注java相关技术
</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:39:22 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:39:22 GMT</pubDate><ttl>60</ttl><item><title>SWT中运用多线程编程</title><link>http://www.blogjava.net/hiswing/archive/2006/08/30/66561.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Wed, 30 Aug 2006 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/30/66561.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/66561.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/30/66561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/66561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/66561.html</trackback:ping><description><![CDATA[
		<p>首先让我们来复习下一什么是多线程？</p>
		<p>　　多线程是这样一种机制，它允许在程序中并发执行多个指令流，每个指令流都称为一个线程，彼此间互相独立。</p>
		<p>　　线程又称为轻量级进程，它和进程一样拥有独立的执行控制，由操作系统负责调度，区别在于线程没有独立的存储空间，而是和所属进程中的其它线程共享一个存储空间，这使得线程间的通信远较进程简单。</p>
		<p>　　多个线程的执行是并发的，也就是在逻辑上“同时”，而不管是否是物理上的“同时”。如果系统只有一个CPU，那么真正的“同时”是不可能的，但是由于CPU的速度非常快，用户感觉不到其中的区别，因此我们也不用关心它，只需要设想各个线程是同时执行即可。</p>
		<p>　　多线程和传统的单线程在程序设计上最大的区别在于，由于各个线程的控制流彼此独立，使得各个线程之间的代码是乱序执行的。</p>
		<p>　　经过以上介绍，想必大家都已经回忆起当时写多线程程序的痛苦。那么再让我们回忆一下，Java中是如何实现多线程的吧。</p>
		<p>　　作为一个完全面向对象的语言，Java提供了类 java.lang.Thread 来方便多线程编程，这个类提供了大量的方法来方便我们控制自己的各个线程。让我们来看一看 Thread 类。Thread 类最重要的方法是 run() ，它为Thread 类的方法 start() 所调用，提供我们的线程所要执行的代码。为了指定我们自己的代码，只需要覆盖它！</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img id="Codehighlighter1_37_373_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_373_Open_Text.style.display='none'; Codehighlighter1_37_373_Closed_Image.style.display='inline'; Codehighlighter1_37_373_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_37_373_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_373_Closed_Text.style.display='none'; Codehighlighter1_37_373_Open_Image.style.display='inline'; Codehighlighter1_37_373_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> MyThread </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> Thread </span>
				<span id="Codehighlighter1_37_373_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_37_373_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> index;<br /></span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         <br /></span>
						<span style="COLOR: #008080"> 4</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_89_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_113_Open_Text.style.display='none'; Codehighlighter1_89_113_Closed_Image.style.display='inline'; Codehighlighter1_89_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_89_113_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_113_Closed_Text.style.display='none'; Codehighlighter1_89_113_Open_Image.style.display='inline'; Codehighlighter1_89_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> MyThread(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i) </span>
						<span id="Codehighlighter1_89_113_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_89_113_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 5</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.index </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> i;<br /></span>
								<span style="COLOR: #008080"> 6</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080"> 7</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
						<span style="COLOR: #008080"> 8</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_138_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_249_Open_Text.style.display='none'; Codehighlighter1_138_249_Closed_Image.style.display='inline'; Codehighlighter1_138_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_138_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_138_249_Closed_Text.style.display='none'; Codehighlighter1_138_249_Open_Image.style.display='inline'; Codehighlighter1_138_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> run() </span>
						<span id="Codehighlighter1_138_249_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_138_249_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 9</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_167_245_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_245_Open_Text.style.display='none'; Codehighlighter1_167_245_Closed_Image.style.display='inline'; Codehighlighter1_167_245_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_167_245_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_167_245_Closed_Text.style.display='none'; Codehighlighter1_167_245_Open_Image.style.display='inline'; Codehighlighter1_167_245_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">while</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.index </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">6</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_167_245_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_167_245_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">10</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">index = </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.index);<br /></span>
										<span style="COLOR: #008080">11</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
												<br />
										</span>
										<span style="COLOR: #008080">12</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.index</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">;<br /></span>
										<span style="COLOR: #008080">13</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">14</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">15</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
						<span style="COLOR: #008080">16</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_295_371_Open_Image" onclick="this.style.display='none'; Codehighlighter1_295_371_Open_Text.style.display='none'; Codehighlighter1_295_371_Closed_Image.style.display='inline'; Codehighlighter1_295_371_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_295_371_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_295_371_Closed_Text.style.display='none'; Codehighlighter1_295_371_Open_Image.style.display='inline'; Codehighlighter1_295_371_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_295_371_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_295_371_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">17</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_330_367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_330_367_Open_Text.style.display='none'; Codehighlighter1_330_367_Closed_Image.style.display='inline'; Codehighlighter1_330_367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_330_367_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_330_367_Closed_Text.style.display='none'; Codehighlighter1_330_367_Open_Image.style.display='inline'; Codehighlighter1_330_367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">10</span>
								<span style="COLOR: #000000">; i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_330_367_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_330_367_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">18</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> MyThread(i).start();<br /></span>
										<span style="COLOR: #008080">19</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">20</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">21</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">22</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>　　当然，除了以上这种方法，Java还提供了Runnable 接口。该接口只有一个方法 run()，我们声明自己的类实现 Runnable 接口并提供这一方法，将线程代码写入其中，就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持，我们还必须创建 Thread 类的实例，这一点通过 Thread 类的构造函数来实现。</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img id="Codehighlighter1_42_390_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_390_Open_Text.style.display='none'; Codehighlighter1_42_390_Closed_Image.style.display='inline'; Codehighlighter1_42_390_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_42_390_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_390_Closed_Text.style.display='none'; Codehighlighter1_42_390_Open_Image.style.display='inline'; Codehighlighter1_42_390_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> MyThread </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Runnable </span>
				<span id="Codehighlighter1_42_390_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_42_390_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> index;<br /></span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         <br /></span>
						<span style="COLOR: #008080"> 4</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_94_118_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_118_Open_Text.style.display='none'; Codehighlighter1_94_118_Closed_Image.style.display='inline'; Codehighlighter1_94_118_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_94_118_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_118_Closed_Text.style.display='none'; Codehighlighter1_94_118_Open_Image.style.display='inline'; Codehighlighter1_94_118_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> MyThread(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i) </span>
						<span id="Codehighlighter1_94_118_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_94_118_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 5</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.index </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> i;<br /></span>
								<span style="COLOR: #008080"> 6</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080"> 7</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
						<span style="COLOR: #008080"> 8</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_143_254_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_254_Open_Text.style.display='none'; Codehighlighter1_143_254_Closed_Image.style.display='inline'; Codehighlighter1_143_254_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_143_254_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_254_Closed_Text.style.display='none'; Codehighlighter1_143_254_Open_Image.style.display='inline'; Codehighlighter1_143_254_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> run() </span>
						<span id="Codehighlighter1_143_254_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_143_254_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 9</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_172_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_172_250_Open_Text.style.display='none'; Codehighlighter1_172_250_Closed_Image.style.display='inline'; Codehighlighter1_172_250_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_172_250_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_172_250_Closed_Text.style.display='none'; Codehighlighter1_172_250_Open_Image.style.display='inline'; Codehighlighter1_172_250_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">while</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.index </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">6</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_172_250_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_172_250_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">10</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">index = </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.index);<br /></span>
										<span style="COLOR: #008080">11</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
												<br />
										</span>
										<span style="COLOR: #008080">12</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.index</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">;<br /></span>
										<span style="COLOR: #008080">13</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">14</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">15</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
						<span style="COLOR: #008080">16</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_300_388_Open_Image" onclick="this.style.display='none'; Codehighlighter1_300_388_Open_Text.style.display='none'; Codehighlighter1_300_388_Closed_Image.style.display='inline'; Codehighlighter1_300_388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_300_388_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_300_388_Closed_Text.style.display='none'; Codehighlighter1_300_388_Open_Image.style.display='inline'; Codehighlighter1_300_388_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_300_388_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_300_388_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">17</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_335_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_335_384_Open_Text.style.display='none'; Codehighlighter1_335_384_Closed_Image.style.display='inline'; Codehighlighter1_335_384_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_335_384_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_335_384_Closed_Text.style.display='none'; Codehighlighter1_335_384_Open_Image.style.display='inline'; Codehighlighter1_335_384_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">10</span>
								<span style="COLOR: #000000">; i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_335_384_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_335_384_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">18</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> Thread(</span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> MyThread(i)).start();<br /></span>
										<span style="COLOR: #008080">19</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">20</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">21</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">22</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">23</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />　　我们已经习惯了以上两种线程的方法，但是，Eclipse的swt却不相同。如果按照我们以上的方法，当访问swt的某一组件时，系统会抛出异常：org.eclipse.swt.SWTException: Invalid thread access 那么，在swt中，如保使用线程呢？</p>
		<p>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img id="Codehighlighter1_37_762_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_762_Open_Text.style.display='none'; Codehighlighter1_37_762_Closed_Image.style.display='inline'; Codehighlighter1_37_762_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_37_762_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_762_Closed_Text.style.display='none'; Codehighlighter1_37_762_Open_Image.style.display='inline'; Codehighlighter1_37_762_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> MyThread </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> Thread </span>
				<span id="Codehighlighter1_37_762_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_37_762_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Display display;<br /></span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Label miniLabel;<br /></span>
						<span style="COLOR: #008080"> 4</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span>
						<span style="COLOR: #008080"> 5</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> index </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">; <br /></span>
						<span style="COLOR: #008080"> 6</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080"> 7</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_188_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_188_258_Open_Text.style.display='none'; Codehighlighter1_188_258_Closed_Image.style.display='inline'; Codehighlighter1_188_258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_188_258_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_258_Closed_Text.style.display='none'; Codehighlighter1_188_258_Open_Image.style.display='inline'; Codehighlighter1_188_258_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> MyThread(Display display, Label label) </span>
						<span id="Codehighlighter1_188_258_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_188_258_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 8</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.display </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> display;<br /></span>
								<span style="COLOR: #008080"> 9</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.miniLabel </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> label;<br /></span>
								<span style="COLOR: #008080">10</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">11</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span>
						<span style="COLOR: #008080">12</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_287_760_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_760_Open_Text.style.display='none'; Codehighlighter1_287_760_Closed_Image.style.display='inline'; Codehighlighter1_287_760_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_287_760_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_760_Closed_Text.style.display='none'; Codehighlighter1_287_760_Open_Image.style.display='inline'; Codehighlighter1_287_760_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> run() </span>
						<span id="Codehighlighter1_287_760_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_287_760_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">13</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_301_730_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_730_Open_Text.style.display='none'; Codehighlighter1_301_730_Closed_Image.style.display='inline'; Codehighlighter1_301_730_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_301_730_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_301_730_Closed_Text.style.display='none'; Codehighlighter1_301_730_Open_Image.style.display='inline'; Codehighlighter1_301_730_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_301_730_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_301_730_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">14</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_328_720_Open_Image" onclick="this.style.display='none'; Codehighlighter1_328_720_Open_Text.style.display='none'; Codehighlighter1_328_720_Closed_Image.style.display='inline'; Codehighlighter1_328_720_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_328_720_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_328_720_Closed_Text.style.display='none'; Codehighlighter1_328_720_Open_Image.style.display='inline'; Codehighlighter1_328_720_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">while</span>
										<span style="COLOR: #000000"> (</span>
										<span style="COLOR: #0000ff">true</span>
										<span style="COLOR: #000000">) </span>
										<span id="Codehighlighter1_328_720_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_328_720_Open_Text">
												<span style="COLOR: #000000">{<br /></span>
												<span style="COLOR: #008080">15</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                Thread.sleep(</span>
												<span style="COLOR: #000000">1000</span>
												<span style="COLOR: #000000">);<br /></span>
												<span style="COLOR: #008080">16</span>
												<span style="COLOR: #000000">
														<img id="Codehighlighter1_414_706_Open_Image" onclick="this.style.display='none'; Codehighlighter1_414_706_Open_Text.style.display='none'; Codehighlighter1_414_706_Closed_Image.style.display='inline'; Codehighlighter1_414_706_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_414_706_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_414_706_Closed_Text.style.display='none'; Codehighlighter1_414_706_Open_Image.style.display='inline'; Codehighlighter1_414_706_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
												<span style="COLOR: #0000ff">if</span>
												<span style="COLOR: #000000"> (</span>
												<span style="COLOR: #000000">!</span>
												<span style="COLOR: #0000ff">this</span>
												<span style="COLOR: #000000">.display.isDisposed()) </span>
												<span id="Codehighlighter1_414_706_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
														<img src="http://www.blogjava.net/images/dot.gif" />
												</span>
												<span id="Codehighlighter1_414_706_Open_Text">
														<span style="COLOR: #000000">{<br /></span>
														<span style="COLOR: #008080">17</span>
														<span style="COLOR: #000000">
																<img id="Codehighlighter1_471_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_606_Open_Text.style.display='none'; Codehighlighter1_471_606_Closed_Image.style.display='inline'; Codehighlighter1_471_606_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
																<img id="Codehighlighter1_471_606_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_471_606_Closed_Text.style.display='none'; Codehighlighter1_471_606_Open_Image.style.display='inline'; Codehighlighter1_471_606_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    Runnable runnable </span>
														<span style="COLOR: #000000">=</span>
														<span style="COLOR: #000000"> </span>
														<span style="COLOR: #0000ff">new</span>
														<span style="COLOR: #000000"> Runnable() </span>
														<span id="Codehighlighter1_471_606_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
																<img src="http://www.blogjava.net/images/dot.gif" />
														</span>
														<span id="Codehighlighter1_471_606_Open_Text">
																<span style="COLOR: #000000">{<br /></span>
																<span style="COLOR: #008080">18</span>
																<span style="COLOR: #000000">
																		<img id="Codehighlighter1_515_584_Open_Image" onclick="this.style.display='none'; Codehighlighter1_515_584_Open_Text.style.display='none'; Codehighlighter1_515_584_Closed_Image.style.display='inline'; Codehighlighter1_515_584_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
																		<img id="Codehighlighter1_515_584_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_515_584_Closed_Text.style.display='none'; Codehighlighter1_515_584_Open_Image.style.display='inline'; Codehighlighter1_515_584_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                        </span>
																<span style="COLOR: #0000ff">public</span>
																<span style="COLOR: #000000"> </span>
																<span style="COLOR: #0000ff">void</span>
																<span style="COLOR: #000000"> run() </span>
																<span id="Codehighlighter1_515_584_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
																		<img src="http://www.blogjava.net/images/dot.gif" />
																</span>
																<span id="Codehighlighter1_515_584_Open_Text">
																		<span style="COLOR: #000000">{<br /></span>
																		<span style="COLOR: #008080">19</span>
																		<span style="COLOR: #000000">
																				<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                            </span>
																		<span style="COLOR: #008000">//</span>
																		<span style="COLOR: #008000"> your source</span>
																		<span style="COLOR: #008000">
																				<br />
																		</span>
																		<span style="COLOR: #008080">20</span>
																		<span style="COLOR: #008000">
																				<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
																		</span>
																		<span style="COLOR: #000000">                        }</span>
																</span>
																<span style="COLOR: #000000">
																		<br />
																</span>
																<span style="COLOR: #008080">21</span>
																<span style="COLOR: #000000">
																		<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span>
														</span>
														<span style="COLOR: #000000">;<br /></span>
														<span style="COLOR: #008080">22</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    <br /></span>
														<span style="COLOR: #008080">23</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    display.asyncExec(runnable); </span>
														<span style="COLOR: #008000">//</span>
														<span style="COLOR: #008000"> 关键在这一句上</span>
														<span style="COLOR: #008000">
																<br />
														</span>
														<span style="COLOR: #008080">24</span>
														<span style="COLOR: #008000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
														</span>
														<span style="COLOR: #000000">                }</span>
												</span>
												<span style="COLOR: #000000">
														<br />
												</span>
												<span style="COLOR: #008080">25</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
										</span>
										<span style="COLOR: #008080">26</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_753_754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_753_754_Open_Text.style.display='none'; Codehighlighter1_753_754_Closed_Image.style.display='inline'; Codehighlighter1_753_754_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_753_754_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_753_754_Closed_Text.style.display='none'; Codehighlighter1_753_754_Open_Image.style.display='inline'; Codehighlighter1_753_754_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (Exception ex) </span>
								<span id="Codehighlighter1_753_754_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_753_754_Open_Text">
										<span style="COLOR: #000000">{}</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">27</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">28</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>swt的display有两种方式实现线程：asyncExec是线程异步的，syncExec是线程同步的。<br /></p>
<img src ="http://www.blogjava.net/hiswing/aggbug/66561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-30 09:25 <a href="http://www.blogjava.net/hiswing/archive/2006/08/30/66561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>禁止重复启动</title><link>http://www.blogjava.net/hiswing/archive/2006/08/10/62887.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 10 Aug 2006 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/10/62887.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62887.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/10/62887.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62887.html</trackback:ping><description><![CDATA[　　许多程序只允许启动单个实例，比如我们常用的MSN、OUTLOOK等等。单实例有很多好处，其中最重要一点即是安全。想像一下多人同时修改同一文件的危险，就如我们在J2EE应用程序中所做的那样，要尽可能考虑到多用户同时访问的问题。<br /><br />　　前些日子用SWING为朋友写了一个程序，其中就有不可同时启动多个系统实例的要求。由于没有一个好的思路，所以走了很多弯路。现在终于解决了，积累了一些心德想与大家分享。<br /><br />　　初遇该问题时，我首先想到的是进程。当程序启动时判断操作系统中是否存在该进程，如果存在就退出启动，否则启动程序。这个方法在VB或C语言中可以通过调用WIN32 API来实现。在JAVA中，要想实现该方法或许还要借助C的力量。（对于JAVA如何捕获进程，还请批评指正。）<br /><br />　　放弃了第一种方法，想到了弱智的方法--配置文件。当系统第一次启动时将标识设置为启动中，退出时将标识设置为未启动。但很快就发现，当非法关闭程序（比如关机时未及时关闭程序）后，我们的程序便永远长眠了。<br /><br />　　其实，在该程序中，最限制我们思路的便是"单机版"这三个字。它给我们的印象是仅供一台机器单独使用，与网络无关的。因此，我们很难将思路整理到服务器与客户机中去。但要解决该问题恰恰要用到服务器与客户机的概念。想像一下我们平时启动电脑的步骤，首先按下加电，有了电，电脑才能启动。没错，只有当电脑未加电，也就是说当我们首次启动电脑时才会做这个动作，而且这个动作在一段时间内只会做一次。若要重新加电，就必需先断电。现在回到我们的程序，有了这个思路，留给我们的问题就是谁来充当电的角色呢？没错，就是之前提到过的服务器。程序首次启动时首先连接指定端口的服务器，发现服务器并未启动，于是启动服务器，启动程序。当程序复数启动时，再次连接服务器，这时发现服务器已经启动了，于是就终止启动。代码如下：<br /><br /><div class="UBBPanel"><div class="UBBContent"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img id="Codehighlighter1_21_1806_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_1806_Open_Text.style.display='none'; Codehighlighter1_21_1806_Closed_Image.style.display='inline'; Codehighlighter1_21_1806_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_1806_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_1806_Closed_Text.style.display='none'; Codehighlighter1_21_1806_Open_Image.style.display='inline'; Codehighlighter1_21_1806_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Console </span><span id="Codehighlighter1_21_1806_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_21_1806_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_27_34_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_34_Open_Text.style.display='none'; Codehighlighter1_27_34_Closed_Image.style.display='inline'; Codehighlighter1_27_34_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_27_34_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_34_Closed_Text.style.display='none'; Codehighlighter1_27_34_Open_Image.style.display='inline'; Codehighlighter1_27_34_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_27_34_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_27_34_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">端口号</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> iPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">50000</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_78_85_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_85_Open_Text.style.display='none'; Codehighlighter1_78_85_Closed_Image.style.display='inline'; Codehighlighter1_78_85_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_78_85_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_85_Closed_Text.style.display='none'; Codehighlighter1_78_85_Open_Image.style.display='inline'; Codehighlighter1_78_85_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_78_85_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_78_85_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">主窗口</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    JFrame frame </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; <br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_117_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_166_Open_Text.style.display='none'; Codehighlighter1_117_166_Closed_Image.style.display='inline'; Codehighlighter1_117_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_117_166_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_166_Closed_Text.style.display='none'; Codehighlighter1_117_166_Open_Image.style.display='inline'; Codehighlighter1_117_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_117_166_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_117_166_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    * 系统入口<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> String[] args<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    * </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_228_752_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_752_Open_Text.style.display='none'; Codehighlighter1_228_752_Closed_Image.style.display='inline'; Codehighlighter1_228_752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_228_752_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_228_752_Closed_Text.style.display='none'; Codehighlighter1_228_752_Open_Image.style.display='inline'; Codehighlighter1_228_752_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception </span><span id="Codehighlighter1_228_752_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_228_752_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Socket socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">客户端连接器</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        Thread thread </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">启动服务器的线程</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id="Codehighlighter1_323_500_Open_Image" onclick="this.style.display='none'; Codehighlighter1_323_500_Open_Text.style.display='none'; Codehighlighter1_323_500_Closed_Image.style.display='inline'; Codehighlighter1_323_500_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_323_500_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_323_500_Closed_Text.style.display='none'; Codehighlighter1_323_500_Open_Image.style.display='inline'; Codehighlighter1_323_500_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_323_500_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_323_500_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">连接服务器<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果服务器未启动则抛异常</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            (socket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Socket(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">localhost</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, iPort)).close();<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果服务器已经启动则退出系统</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            System.exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id="Codehighlighter1_522_523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_522_523_Open_Text.style.display='none'; Codehighlighter1_522_523_Closed_Image.style.display='inline'; Codehighlighter1_522_523_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_522_523_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_522_523_Closed_Text.style.display='none'; Codehighlighter1_522_523_Open_Image.style.display='inline'; Codehighlighter1_522_523_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e) </span><span id="Codehighlighter1_522_523_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_522_523_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">未做处理<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果服务器未启动则在新的线程中启动服务器</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        (thread </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Thread(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Server())).setDaemon(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开始线程</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        thread.start();<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">启动主程序</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        frame </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> JFrame(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">学海无涯</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        frame.setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id="Codehighlighter1_763_811_Open_Image" onclick="this.style.display='none'; Codehighlighter1_763_811_Open_Text.style.display='none'; Codehighlighter1_763_811_Closed_Image.style.display='inline'; Codehighlighter1_763_811_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_763_811_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_763_811_Closed_Text.style.display='none'; Codehighlighter1_763_811_Open_Image.style.display='inline'; Codehighlighter1_763_811_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_763_811_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_763_811_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    * 端口监听服务器端运行<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> hiswing<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id="Codehighlighter1_857_1804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_857_1804_Open_Text.style.display='none'; Codehighlighter1_857_1804_Closed_Image.style.display='inline'; Codehighlighter1_857_1804_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_857_1804_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_857_1804_Closed_Text.style.display='none'; Codehighlighter1_857_1804_Open_Image.style.display='inline'; Codehighlighter1_857_1804_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Server </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Runnable </span><span id="Codehighlighter1_857_1804_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_857_1804_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id="Codehighlighter1_891_1798_Open_Image" onclick="this.style.display='none'; Codehighlighter1_891_1798_Open_Text.style.display='none'; Codehighlighter1_891_1798_Closed_Image.style.display='inline'; Codehighlighter1_891_1798_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_891_1798_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_891_1798_Closed_Text.style.display='none'; Codehighlighter1_891_1798_Open_Image.style.display='inline'; Codehighlighter1_891_1798_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() </span><span id="Codehighlighter1_891_1798_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_891_1798_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ServerSocket serversocket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查找没有占用的端口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #008000"><img id="Codehighlighter1_998_1201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_998_1201_Open_Text.style.display='none'; Codehighlighter1_998_1201_Closed_Image.style.display='inline'; Codehighlighter1_998_1201_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_998_1201_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_998_1201_Closed_Text.style.display='none'; Codehighlighter1_998_1201_Open_Image.style.display='inline'; Codehighlighter1_998_1201_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (iPort </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">60000</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_998_1201_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_998_1201_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id="Codehighlighter1_1019_1097_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1019_1097_Open_Text.style.display='none'; Codehighlighter1_1019_1097_Closed_Image.style.display='inline'; Codehighlighter1_1019_1097_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1019_1097_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1019_1097_Closed_Text.style.display='none'; Codehighlighter1_1019_1097_Open_Image.style.display='inline'; Codehighlighter1_1019_1097_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">try</span><span id="Codehighlighter1_1019_1097_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1019_1097_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    serversocket </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ServerSocket(iPort);<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id="Codehighlighter1_1117_1164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1117_1164_Open_Text.style.display='none'; Codehighlighter1_1117_1164_Closed_Image.style.display='inline'; Codehighlighter1_1117_1164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1117_1164_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1117_1164_Closed_Text.style.display='none'; Codehighlighter1_1117_1164_Open_Image.style.display='inline'; Codehighlighter1_1117_1164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                }</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception ex)</span><span id="Codehighlighter1_1117_1164_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1117_1164_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    iPort</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img id="Codehighlighter1_1219_1728_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1219_1728_Open_Text.style.display='none'; Codehighlighter1_1219_1728_Closed_Image.style.display='inline'; Codehighlighter1_1219_1728_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1219_1728_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1219_1728_Closed_Text.style.display='none'; Codehighlighter1_1219_1728_Open_Image.style.display='inline'; Codehighlighter1_1219_1728_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1219_1728_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1219_1728_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img id="Codehighlighter1_1240_1701_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1240_1701_Open_Text.style.display='none'; Codehighlighter1_1240_1701_Closed_Image.style.display='inline'; Codehighlighter1_1240_1701_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1240_1701_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1240_1701_Closed_Text.style.display='none'; Codehighlighter1_1240_1701_Open_Image.style.display='inline'; Codehighlighter1_1240_1701_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1240_1701_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1240_1701_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">监听客户端是否有连接</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">                    serversocket.accept();<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">窗口在任务栏闪动</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #008000"><img id="Codehighlighter1_1404_1477_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1404_1477_Open_Text.style.display='none'; Codehighlighter1_1404_1477_Closed_Image.style.display='inline'; Codehighlighter1_1404_1477_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1404_1477_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1404_1477_Closed_Text.style.display='none'; Codehighlighter1_1404_1477_Open_Image.style.display='inline'; Codehighlighter1_1404_1477_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">                    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(frame.getExtendedState() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_1404_1477_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1404_1477_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        frame.setExtendedState(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img id="Codehighlighter1_1533_1683_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1533_1683_Open_Text.style.display='none'; Codehighlighter1_1533_1683_Closed_Image.style.display='inline'; Codehighlighter1_1533_1683_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1533_1683_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1533_1683_Closed_Text.style.display='none'; Codehighlighter1_1533_1683_Open_Image.style.display='inline'; Codehighlighter1_1533_1683_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(frame.getExtendedState() </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_1533_1683_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1533_1683_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        frame.toFront();<br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        frame.requestFocus();<br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        frame.repaint();<br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img id="Codehighlighter1_1751_1788_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1751_1788_Open_Text.style.display='none'; Codehighlighter1_1751_1788_Closed_Image.style.display='inline'; Codehighlighter1_1751_1788_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1751_1788_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1751_1788_Closed_Text.style.display='none'; Codehighlighter1_1751_1788_Open_Image.style.display='inline'; Codehighlighter1_1751_1788_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception ex) </span><span id="Codehighlighter1_1751_1788_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1751_1788_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不做处理</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">66</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">            }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />　　由于没有好的思路，使我们在编程中走了许多弯路，浪费了宝贵的时间。都说软件是智慧的结晶，一点没错。 <img src ="http://www.blogjava.net/hiswing/aggbug/62887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-10 23:59 <a href="http://www.blogjava.net/hiswing/archive/2006/08/10/62887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swt/JFace制做系统托盘程序</title><link>http://www.blogjava.net/hiswing/archive/2006/08/09/62593.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Wed, 09 Aug 2006 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/09/62593.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62593.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/09/62593.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62593.html</trackback:ping><description><![CDATA[　　一些桌面应用程序会在系统的工具条上显示一个图标，即使程序最小化了，也可以供用户方便地操作程序。以前使用Swing来制做这个功能的时候费了不小的力气，使用了JNI来完成这个功能(JNI：Java Native Interface Java本地编程接口，可以通过调用汇编或C或C++程序来完成某些功能)。自从Eclipse推出之后，swt就占据了java开发桌面应用的大部分份额，其中最大的优点就是swt为我们提供了与操作系统交互的接口（其实，swt内容的实现机制就是通过JNI来实现的）。下面是今天完成的系统托盘的例子。<br /><br /><div class="UBBPanel"><div class="UBBTitle"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 取得系统托盘对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> Tray tray </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> shell.getDisplay().getSystemTray();<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_86_1699_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_1699_Open_Text.style.display='none'; Codehighlighter1_86_1699_Closed_Image.style.display='inline'; Codehighlighter1_86_1699_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_86_1699_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_1699_Closed_Text.style.display='none'; Codehighlighter1_86_1699_Open_Image.style.display='inline'; Codehighlighter1_86_1699_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (tray </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_86_1699_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_86_1699_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 生成托盘对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> TrayItem item </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TrayItem(tray, SWT.NONE);<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 为托盘对象添加鼠标停留时的文字</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        item.setToolTipText(“六月天”);<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 为托盘添加事件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img id="Codehighlighter1_262_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_262_349_Open_Text.style.display='none'; Codehighlighter1_262_349_Closed_Image.style.display='inline'; Codehighlighter1_262_349_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_262_349_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_262_349_Closed_Text.style.display='none'; Codehighlighter1_262_349_Open_Image.style.display='inline'; Codehighlighter1_262_349_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">        item.addListener(SWT.Show, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Listener() </span><span id="Codehighlighter1_262_349_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_262_349_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id="Codehighlighter1_305_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_305_345_Open_Text.style.display='none'; Codehighlighter1_305_345_Closed_Image.style.display='inline'; Codehighlighter1_305_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_305_345_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_305_345_Closed_Text.style.display='none'; Codehighlighter1_305_345_Open_Image.style.display='inline'; Codehighlighter1_305_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> handleEvent(Event event) </span><span id="Codehighlighter1_305_345_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_305_345_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">show</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id="Codehighlighter1_397_484_Open_Image" onclick="this.style.display='none'; Codehighlighter1_397_484_Open_Text.style.display='none'; Codehighlighter1_397_484_Closed_Image.style.display='inline'; Codehighlighter1_397_484_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_397_484_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_397_484_Closed_Text.style.display='none'; Codehighlighter1_397_484_Open_Image.style.display='inline'; Codehighlighter1_397_484_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        item.addListener(SWT.Hide, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Listener() </span><span id="Codehighlighter1_397_484_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_397_484_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id="Codehighlighter1_440_480_Open_Image" onclick="this.style.display='none'; Codehighlighter1_440_480_Open_Text.style.display='none'; Codehighlighter1_440_480_Closed_Image.style.display='inline'; Codehighlighter1_440_480_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_440_480_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_440_480_Closed_Text.style.display='none'; Codehighlighter1_440_480_Open_Image.style.display='inline'; Codehighlighter1_440_480_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> handleEvent(Event event) </span><span id="Codehighlighter1_440_480_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_440_480_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hide</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id="Codehighlighter1_537_629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_537_629_Open_Text.style.display='none'; Codehighlighter1_537_629_Closed_Image.style.display='inline'; Codehighlighter1_537_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_537_629_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_537_629_Closed_Text.style.display='none'; Codehighlighter1_537_629_Open_Image.style.display='inline'; Codehighlighter1_537_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        item.addListener(SWT.Selection, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Listener() </span><span id="Codehighlighter1_537_629_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_537_629_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_580_625_Open_Image" onclick="this.style.display='none'; Codehighlighter1_580_625_Open_Text.style.display='none'; Codehighlighter1_580_625_Closed_Image.style.display='inline'; Codehighlighter1_580_625_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_580_625_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_580_625_Closed_Text.style.display='none'; Codehighlighter1_580_625_Open_Image.style.display='inline'; Codehighlighter1_580_625_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> handleEvent(Event event) </span><span id="Codehighlighter1_580_625_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_580_625_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">selection</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img id="Codehighlighter1_689_789_Open_Image" onclick="this.style.display='none'; Codehighlighter1_689_789_Open_Text.style.display='none'; Codehighlighter1_689_789_Closed_Image.style.display='inline'; Codehighlighter1_689_789_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_689_789_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_689_789_Closed_Text.style.display='none'; Codehighlighter1_689_789_Open_Image.style.display='inline'; Codehighlighter1_689_789_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        item.addListener(SWT.DefaultSelection, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Listener() </span><span id="Codehighlighter1_689_789_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_689_789_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img id="Codehighlighter1_732_785_Open_Image" onclick="this.style.display='none'; Codehighlighter1_732_785_Open_Text.style.display='none'; Codehighlighter1_732_785_Closed_Image.style.display='inline'; Codehighlighter1_732_785_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_732_785_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_732_785_Closed_Text.style.display='none'; Codehighlighter1_732_785_Open_Image.style.display='inline'; Codehighlighter1_732_785_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> handleEvent(Event event) </span><span id="Codehighlighter1_732_785_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_732_785_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">default selection</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 为托盘对象添加显示用的图标</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        item.setImage(image);<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 生成菜单项</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> Menu menu </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Menu(shell, SWT.POP_UP);<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        MenuItem miShow </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> MenuItem(menu, SWT.PUSH);<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        miShow.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">S&amp;how</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id="Codehighlighter1_1030_1226_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1030_1226_Open_Text.style.display='none'; Codehighlighter1_1030_1226_Closed_Image.style.display='inline'; Codehighlighter1_1030_1226_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1030_1226_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1030_1226_Closed_Text.style.display='none'; Codehighlighter1_1030_1226_Open_Image.style.display='inline'; Codehighlighter1_1030_1226_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        miShow.addSelectionListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SelectionListener() </span><span id="Codehighlighter1_1030_1226_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1030_1226_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id="Codehighlighter1_1084_1152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1084_1152_Open_Text.style.display='none'; Codehighlighter1_1084_1152_Closed_Image.style.display='inline'; Codehighlighter1_1084_1152_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1084_1152_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1084_1152_Closed_Text.style.display='none'; Codehighlighter1_1084_1152_Open_Image.style.display='inline'; Codehighlighter1_1084_1152_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> widgetSelected(SelectionEvent arg0) </span><span id="Codehighlighter1_1084_1152_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1084_1152_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        shell.setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        shell.setMaximized(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id="Codehighlighter1_1216_1222_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1216_1222_Open_Text.style.display='none'; Codehighlighter1_1216_1222_Closed_Image.style.display='inline'; Codehighlighter1_1216_1222_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1216_1222_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1216_1222_Closed_Text.style.display='none'; Codehighlighter1_1216_1222_Open_Image.style.display='inline'; Codehighlighter1_1216_1222_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> widgetDefaultSelected(SelectionEvent arg0) </span><span id="Codehighlighter1_1216_1222_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1216_1222_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        MenuItem miExit </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> MenuItem(menu, SWT.PUSH);<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        miExit.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">E&amp;xit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img id="Codehighlighter1_1367_1527_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1367_1527_Open_Text.style.display='none'; Codehighlighter1_1367_1527_Closed_Image.style.display='inline'; Codehighlighter1_1367_1527_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1367_1527_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1367_1527_Closed_Text.style.display='none'; Codehighlighter1_1367_1527_Open_Image.style.display='inline'; Codehighlighter1_1367_1527_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        miExit.addSelectionListener(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SelectionListener() </span><span id="Codehighlighter1_1367_1527_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1367_1527_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img id="Codehighlighter1_1421_1451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1421_1451_Open_Text.style.display='none'; Codehighlighter1_1421_1451_Closed_Image.style.display='inline'; Codehighlighter1_1421_1451_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1421_1451_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1421_1451_Closed_Text.style.display='none'; Codehighlighter1_1421_1451_Open_Image.style.display='inline'; Codehighlighter1_1421_1451_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> widgetSelected(SelectionEvent arg0) </span><span id="Codehighlighter1_1421_1451_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1421_1451_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        exitAction.run();<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                <br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img id="Codehighlighter1_1517_1523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1517_1523_Open_Text.style.display='none'; Codehighlighter1_1517_1523_Closed_Image.style.display='inline'; Codehighlighter1_1517_1523_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1517_1523_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1517_1523_Closed_Text.style.display='none'; Codehighlighter1_1517_1523_Open_Image.style.display='inline'; Codehighlighter1_1517_1523_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> widgetDefaultSelected(SelectionEvent arg0) </span><span id="Codehighlighter1_1517_1523_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1517_1523_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 为托盘对象添加事件，当右键点击图标时，显示菜单</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #008000"><img id="Codehighlighter1_1613_1695_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1613_1695_Open_Text.style.display='none'; Codehighlighter1_1613_1695_Closed_Image.style.display='inline'; Codehighlighter1_1613_1695_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1613_1695_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1613_1695_Closed_Text.style.display='none'; Codehighlighter1_1613_1695_Open_Image.style.display='inline'; Codehighlighter1_1613_1695_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">        item.addListener(SWT.MenuDetect, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Listener() </span><span id="Codehighlighter1_1613_1695_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1613_1695_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img id="Codehighlighter1_1656_1691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1656_1691_Open_Text.style.display='none'; Codehighlighter1_1656_1691_Closed_Image.style.display='inline'; Codehighlighter1_1656_1691_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1656_1691_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1656_1691_Closed_Text.style.display='none'; Codehighlighter1_1656_1691_Open_Image.style.display='inline'; Codehighlighter1_1656_1691_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> handleEvent(Event event) </span><span id="Codehighlighter1_1656_1691_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1656_1691_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                        menu.setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />总结：swt/jface为java程序员提供了快速反映的界面，由于swt/jface本身也是利用JNI来调用系统的界面，所以在实现界面的同时也为程序员提供了一些与操作系统交互的方法。利用这些方法，可以很方便快捷地完成我们的功能。<br /><br />Eclipse的Forms也非常不错，提供了华丽的界面，写出来的程序就如同网页一样，当然要有一定的审美眼光，有兴趣的朋友不仿研究研究。 <img src ="http://www.blogjava.net/hiswing/aggbug/62593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-09 16:19 <a href="http://www.blogjava.net/hiswing/archive/2006/08/09/62593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Excel API操作Excel的一个问题</title><link>http://www.blogjava.net/hiswing/archive/2006/08/04/61806.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 04 Aug 2006 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/04/61806.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/61806.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/04/61806.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/61806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/61806.html</trackback:ping><description><![CDATA[　　今天为cfms系统增加了账票功能，将列表中的数据导入Excel文件中。在以前用Java操作Excel十分困难，最常用的是生成CSV（comma separated values）文件，然后用Excel打开该文件。这样只能说可以访问到Excel文件，但是还不能真正的操纵Excel文件。还有将数据生成xml，并由vb或vc来读取并生成Excel文件。这样效率显然比较差。Java Excel API是一个开源项目，通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非 Windows操作系统也可以通过纯Java应用来处理Excel数据表。使用它可以方便地操纵Excel文件。关于Java Excel API的基本操作和使用请参见利用JAVA操作EXCEL文件．这里补充一下自己在实际开发过程中遇到的问题以及解决方案。<br /><br />　　在修改Excel文件时，由于文件的单元格有各种样式(如：边框，背景等)，在更新时，如果直接使用以下代码则会把单元格的样式覆盖。<br /><div class="UBBPanel"><div class="UBBContent">//生成新的Label<br />jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");<br />//将label插入sheet中<br />ws.addCell(labelC); </div></div><br />正确的写法应该如下：<br /><div class="UBBPanel"><div class="UBBContent">//这里的数据类型为字符型，若为其它类型请将其转为正确的类型，否则出错。<br />jxl.write.Label labelC = (Label) sheet.getWritableCell(0, 0);<br />labelC.setString("This is a Label cell"); </div></div><br />在利用如下代码进行拷贝操作时，总无法成功。<br /><div class="UBBPanel"><div class="UBBContent">jxl.write.Label labelC.copyTo(0, 1)； </div></div><br />原因是该操作只是生成了labelC的一个副本，并没有真正插入sheet中。正确的做法如下：<br /><div class="UBBPanel"><div class="UBBContent">sheet.addCell(jxl.write.Label labelC.copyTo(0, 1)); </div></div><br />　　以前用com操作Excel，突然使用Java Excel API还真有点不适应。最主要的区别还是在思路上。我感觉目前Java Excel API功能还不是很强大，操作起来非常复杂，还需改进。com一行代码就可完成的功能，在这里需要写N行。话又说回来，有谁比Microsoft更了解他们自己的东西呢？ <img src ="http://www.blogjava.net/hiswing/aggbug/61806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-04 17:46 <a href="http://www.blogjava.net/hiswing/archive/2006/08/04/61806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一道java题，你能做对吗？</title><link>http://www.blogjava.net/hiswing/archive/2006/08/01/61151.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Tue, 01 Aug 2006 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/01/61151.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/61151.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/01/61151.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/61151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/61151.html</trackback:ping><description><![CDATA[你认为以下程序打印出来的结果是多少呢？<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_18_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_141_Open_Text.style.display='none'; Codehighlighter1_18_141_Closed_Image.style.display='inline'; Codehighlighter1_18_141_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_18_141_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_18_141_Closed_Text.style.display='none'; Codehighlighter1_18_141_Open_Image.style.display='inline'; Codehighlighter1_18_141_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test </span><span id="Codehighlighter1_18_141_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_18_141_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_63_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_139_Open_Text.style.display='none'; Codehighlighter1_63_139_Closed_Image.style.display='inline'; Codehighlighter1_63_139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_63_139_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_139_Closed_Text.style.display='none'; Codehighlighter1_63_139_Open_Image.style.display='inline'; Codehighlighter1_63_139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_63_139_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_63_139_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        i </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(i);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>请给出答案后自己运行一遍。记得，要先给出答案再运行。<img src ="http://www.blogjava.net/hiswing/aggbug/61151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-01 11:17 <a href="http://www.blogjava.net/hiswing/archive/2006/08/01/61151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java克隆详述-下</title><link>http://www.blogjava.net/hiswing/archive/2006/07/27/60440.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 27 Jul 2006 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/07/27/60440.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/60440.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/07/27/60440.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/60440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/60440.html</trackback:ping><description><![CDATA[何为影子clone？先看一下例子。<br /><div class="UBBPanel"><div class="UBBTitle"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">倒霉的羊</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img id="Codehighlighter1_46_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_288_Open_Text.style.display='none'; Codehighlighter1_46_288_Closed_Image.style.display='inline'; Codehighlighter1_46_288_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_288_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_288_Closed_Text.style.display='none'; Codehighlighter1_46_288_Open_Image.style.display='inline'; Codehighlighter1_46_288_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheep </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable</span><span id="Codehighlighter1_46_288_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_46_288_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_109_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_135_Open_Text.style.display='none'; Codehighlighter1_109_135_Closed_Image.style.display='inline'; Codehighlighter1_109_135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_109_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_135_Closed_Text.style.display='none'; Codehighlighter1_109_135_Open_Image.style.display='inline'; Codehighlighter1_109_135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String arg) </span><span id="Codehighlighter1_109_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_109_135_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id="Codehighlighter1_165_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_190_Open_Text.style.display='none'; Codehighlighter1_165_190_Closed_Image.style.display='inline'; Codehighlighter1_165_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_190_Closed_Text.style.display='none'; Codehighlighter1_165_190_Open_Image.style.display='inline'; Codehighlighter1_165_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_165_190_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_165_190_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_252_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_252_286_Open_Text.style.display='none'; Codehighlighter1_252_286_Closed_Image.style.display='inline'; Codehighlighter1_252_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_252_286_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_252_286_Closed_Text.style.display='none'; Codehighlighter1_252_286_Open_Image.style.display='inline'; Codehighlighter1_252_286_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_252_286_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_252_286_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">羊圈</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img id="Codehighlighter1_339_527_Open_Image" onclick="this.style.display='none'; Codehighlighter1_339_527_Open_Text.style.display='none'; Codehighlighter1_339_527_Closed_Image.style.display='inline'; Codehighlighter1_339_527_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_339_527_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_339_527_Closed_Text.style.display='none'; Codehighlighter1_339_527_Open_Image.style.display='inline'; Codehighlighter1_339_527_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheepfold </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable </span><span id="Codehighlighter1_339_527_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_339_527_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Sheep sheep;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id="Codehighlighter1_406_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_406_435_Open_Text.style.display='none'; Codehighlighter1_406_435_Closed_Image.style.display='inline'; Codehighlighter1_406_435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_406_435_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_406_435_Closed_Text.style.display='none'; Codehighlighter1_406_435_Open_Image.style.display='inline'; Codehighlighter1_406_435_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Sheepfold() </span><span id="Codehighlighter1_406_435_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_406_435_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheep();<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_495_525_Open_Image" onclick="this.style.display='none'; Codehighlighter1_495_525_Open_Text.style.display='none'; Codehighlighter1_495_525_Closed_Image.style.display='inline'; Codehighlighter1_495_525_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_495_525_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_495_525_Closed_Text.style.display='none'; Codehighlighter1_495_525_Open_Image.style.display='inline'; Codehighlighter1_495_525_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_495_525_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_495_525_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">克隆</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img id="Codehighlighter1_552_1335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_552_1335_Open_Text.style.display='none'; Codehighlighter1_552_1335_Closed_Image.style.display='inline'; Codehighlighter1_552_1335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_552_1335_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_552_1335_Closed_Text.style.display='none'; Codehighlighter1_552_1335_Open_Image.style.display='inline'; Codehighlighter1_552_1335_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_552_1335_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_552_1335_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id="Codehighlighter1_612_1333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_612_1333_Open_Text.style.display='none'; Codehighlighter1_612_1333_Closed_Image.style.display='inline'; Codehighlighter1_612_1333_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_612_1333_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_612_1333_Closed_Text.style.display='none'; Codehighlighter1_612_1333_Open_Image.style.display='inline'; Codehighlighter1_612_1333_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception </span><span id="Codehighlighter1_612_1333_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_612_1333_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheepfold();<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    fold.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">小羊圈</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    fold.sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">小羊</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheepfold)fold.clone();<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.name);<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.sheep.getName());<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    fold2.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">大羊圈</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    fold2.sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">大羊</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=====================================</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.name);<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">* fold2.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.sheep.getName());<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold.name);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">* fold.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold.sheep.getName());<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=====================================</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />　　在这个例子中有三个类，Sheep和Sheepflod都实现了Cloneable接口，并且覆写了Object类的clone方法，说明这两个类是具有克隆能力的。注意一点，在Sheepflod中持有一个Sheep的实例，并在Main类中对其进行克隆，结果如下：<br />fold2.name = 小羊圈<br />fold2.sheep.getName() = 小羊<br />=====================================<br />fold2.name = 大羊圈<br />* fold2.sheep.getName() = 大羊<br />fold.name = 小羊圈<br />* fold.sheep.getName() = 大羊<br />===================================== <br /><br />　　请注意一下结果中带有"*"号的两条结果语句。fold2.sheep和fold.sheep的name都变为了"大羊"，很奇怪是吗？在此之前，我们只对fold2.sheep的name赋过值。为什么fold.sheep的name也变为了"大羊"呢？原因很简单，因为它们是指向同一个对象的不同引用。从中可以看出，调用Object类中clone()方法时，首先在内存中划分一块同原对象相同的空间，然后将原对象的内容原样拷贝至新对象。我们知道，java中有基本数据类型，对于基本数据类型，这样的操作是没有问题的，但对非基本类型变量，它们保存的仅仅是对象的引用，这也是为什么clone后非基本类型变量和原对象中的变量指向同一个对象的原因。可能你已经注意到，程序中用到了String类型，即对象，为什么没有出现引用指向同一地址的情况？这是因为String是一个不可更改的类（immutable class），每次给它赋值时，都会产生一个新的String对象。如String str = "a"; str += "b";在这两句代码中，当执行str += "b"时，实际上是重新成生了一个值为"ab"的String对象，即重新分配了一块内存空间。以上clone方法通常被称为"影子clone"。"影子clone"给我们留下了一个问题，即多个引用指向同一个对象。如何解决该问题呢？答案为"深度clone"。把上面的例子改成深度clone很简单，只需将Sheepfold的clone()方法改为如下即可：<br /><div class="UBBPanel"><div class="UBBTitle"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img id="Codehighlighter1_56_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_161_Open_Text.style.display='none'; Codehighlighter1_56_161_Closed_Image.style.display='inline'; Codehighlighter1_56_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_56_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_161_Closed_Text.style.display='none'; Codehighlighter1_56_161_Open_Image.style.display='inline'; Codehighlighter1_56_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_56_161_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_56_161_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheepfold)</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheep)fold.sheep.clone();<br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> fold;<br /></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div></div></div><br />　　至此，clone就基本完成了。当然，在实际使用过程中需要注意一些问题，比如StringBuffer不可以直接clone（当然，也有解决办法）等等。<br /><br />　　完！ <br /><br />　　2004-09-01<img src ="http://www.blogjava.net/hiswing/aggbug/60440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-07-27 23:32 <a href="http://www.blogjava.net/hiswing/archive/2006/07/27/60440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java克隆详述-上</title><link>http://www.blogjava.net/hiswing/archive/2006/07/27/60438.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 27 Jul 2006 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/07/27/60438.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/60438.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/07/27/60438.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/60438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/60438.html</trackback:ping><description><![CDATA[　　在今天的工作中，为了解决对象地址的问题，使用了java的clone。但发现有些同事竟然对clone很是不明白，甚至对"引用"(reference)也是一头雾水。这些都是java最基础的概念，也是最重要的，是我们在学习java时必须领会的。<br /><br />　　经常听到有人说java中没有指针。事实如此吗？no，java是有指针的，只不过换了个名字而已，也就是我们经常提到的引用。我们知道，在java中一切都是对象，那么我们如何操控对象？如何在成千上万的对象中找到我们所需的那个对象呢？又是如何让对象按照我们的意思来完成任务的呢？<br />　　Object o = new Object(); <br /><br />　　这是java中最常见的语句了，在这句话中做了三件事。首先声明一个Object类型的变量o，在内存中为对象划分一块地址new Object()，将声明的变量指向内存中的对象。如此一来，我们就可以通过o来操纵对象了。就好像孩子们玩的遥控飞机，在空中飞行的是飞机，而使它做出优美动作的却是孩子们手中的摇控器。<br /><br />　　"克隆"是如今听到的较多的词汇，听说已经将某只羊克隆了好几份了。但愿这种技术不要在人身上实验。java中也有"克隆"，与现实世界的克隆一样，将一个实际存在的对象拷贝几份。如下：<br /><div class="UBBPanel"><div class="UBBTitle"> </div><div class="UBBContent"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">倒霉的羊</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img id="Codehighlighter1_46_292_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_292_Open_Text.style.display='none'; Codehighlighter1_46_292_Closed_Image.style.display='inline'; Codehighlighter1_46_292_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_292_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_292_Closed_Text.style.display='none'; Codehighlighter1_46_292_Open_Image.style.display='inline'; Codehighlighter1_46_292_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheep </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable</span><span id="Codehighlighter1_46_292_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_46_292_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_109_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_135_Open_Text.style.display='none'; Codehighlighter1_109_135_Closed_Image.style.display='inline'; Codehighlighter1_109_135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_109_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_135_Closed_Text.style.display='none'; Codehighlighter1_109_135_Open_Image.style.display='inline'; Codehighlighter1_109_135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String arg) </span><span id="Codehighlighter1_109_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_109_135_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id="Codehighlighter1_165_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_192_Open_Text.style.display='none'; Codehighlighter1_165_192_Closed_Image.style.display='inline'; Codehighlighter1_165_192_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_192_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_192_Closed_Text.style.display='none'; Codehighlighter1_165_192_Open_Image.style.display='inline'; Codehighlighter1_165_192_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_165_192_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_165_192_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_254_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_290_Open_Text.style.display='none'; Codehighlighter1_254_290_Closed_Image.style.display='inline'; Codehighlighter1_254_290_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_254_290_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_254_290_Closed_Text.style.display='none'; Codehighlighter1_254_290_Open_Image.style.display='inline'; Codehighlighter1_254_290_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_254_290_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_254_290_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">克隆</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img id="Codehighlighter1_317_693_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_693_Open_Text.style.display='none'; Codehighlighter1_317_693_Closed_Image.style.display='inline'; Codehighlighter1_317_693_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_317_693_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_317_693_Closed_Text.style.display='none'; Codehighlighter1_317_693_Open_Image.style.display='inline'; Codehighlighter1_317_693_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_317_693_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_317_693_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id="Codehighlighter1_396_691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_691_Open_Text.style.display='none'; Codehighlighter1_396_691_Closed_Image.style.display='inline'; Codehighlighter1_396_691_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_396_691_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_396_691_Closed_Text.style.display='none'; Codehighlighter1_396_691_Open_Image.style.display='inline'; Codehighlighter1_396_691_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_396_691_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_396_691_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Sheep sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheep(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先得到那只羊的实例</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">我是真的</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">给它做个记号</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> sheep.getName());<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Sheep sheepClone </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheep)sheep.clone(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开始克隆</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sheepClone.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> sheepClone.getName());<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div></div></div><br />运行程序结果为：<br />sheep.getName() = 我是真的<br />sheepClone.getName() = 我是真的<br /><br />　　两只羊是一模一样的（哪怕那只羊瘸腿）。让我们来看看代码。首先要注意的是Sheep类实现了Cloneable接口（该接口属于java.lang包，默认已经导入了），该接口中并没有定义要实现的方法，是个空接口，起标志作用。也就是说，实现了这个接口的羊就不再是只普通的羊，它是一只可以被克隆的羊。再往下看，有个clone方法，返回Object类型的对象，并抛出CloneNotSupportedException异常。该方法覆写了父类(Object)的clone方法，并在最后调用了super.clone()，这也意味着无论clone类继承结构是什么样的，super.clone()都会直接或间接调用Object类的clone()方法。看看jdk帮助文档会发现，Object类的clone()是一个native方法，我们知道，native方法的效率一般来说都是远高于java中的非native方法。这也说明了new一个对象，然后将原对象中的数据导入到新创建的对象中去的做法是多么愚蠢。必须说明的是Object中的clone方法是protected的，所以要使用clone就必须继承Object类（默认）。并且为了可以使其它类调用该方法，必须将其作用域设置为public。<br /><br />　　以上只是一个简单clone的实现。明天说说"影子clone"和"深度clone"。<br /><br />　　夜，深了。 <br /><br />　　2004-08-31<img src ="http://www.blogjava.net/hiswing/aggbug/60438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-07-27 23:24 <a href="http://www.blogjava.net/hiswing/archive/2006/07/27/60438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>