<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6648236360472666945</id><updated>2012-05-07T02:51:46.812+08:00</updated><category term='網路交易'/><category term='CardGame'/><category term='Program'/><category term='網路遊戲'/><category term='星海爭霸2'/><category term='PSP'/><category term='NDS 攻略'/><category term='料理筆記'/><category term='VB.NET'/><category term='Apple'/><category term='SFC'/><category term='摩爾莊園'/><category term='Ajax'/><category term='C++'/><category term='Chrome'/><category term='DnD'/><category term='NDS資訊'/><category term='Mac'/><category term='Software'/><category term='精靈幻境系列'/><category term='Writing'/><category term='RO OpenKore'/><category term='FC'/><category term='PS'/><category term='星海爭霸2地圖'/><category term='摩爾勇士'/><category term='Culdcept'/><category term='生活相關'/><category term='遊戲設計'/><category term='RO'/><category term='限時免費APP'/><category term='BioInfo'/><category term='MHP3'/><category term='博弈遊戲'/><category term='LoL'/><category term='星海爭霸2雜錦'/><category term='Music'/><category term='RO JA.NET'/><category term='3DS'/><category term='遊戲新聞'/><category term='軟體相關'/><category term='模擬器'/><category term='雜談錄'/><category term='Java'/><category term='iOS開發'/><category term='動畫專區'/><category term='特價折扣'/><category term='ROM'/><category term='Php'/><category term='WebGame'/><category term='JavaScript'/><category term='遊戲王'/><category term='Blog'/><category term='魔法風雲會'/><title type='text'>GameLifeX</title><subtitle type='html'>　不只是遊戲，是生活</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/-/Java'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/search/label/Java'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6648236360472666945.post-1991093791605731466</id><published>2008-12-07T08:05:00.005+08:00</published><updated>2009-01-05T19:06:57.536+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>JAVA的Layout</title><content type='html'>• BorderLayout&lt;br /&gt;• FlowLayout&lt;br /&gt;• CardLayout&lt;br /&gt;• GridLayout&lt;br /&gt;• GridbagLayout&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BorderLayout使用方式：&lt;/span&gt;&lt;br /&gt;• 建構子&lt;br /&gt;– BorderLayout()&lt;br /&gt;• add方法&lt;br /&gt;– 元件&lt;br /&gt;– 位置&lt;br /&gt;• BorderLayout類別常數&lt;br /&gt;• CENTER、EAST、SOUTH、WEST、NORTH&lt;br /&gt;設定元件間的空隙：&lt;br /&gt;• 建構子&lt;br /&gt;• 方法&lt;br /&gt;– setHgap、setVgap&lt;br /&gt;&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BsYyM_o2_Pc/STsT8HYConI/AAAAAAAAAIg/fl3t6ynJFi4/s1600-h/2008-07-22_140129.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 317px; height: 320px;" src="http://4.bp.blogspot.com/_BsYyM_o2_Pc/STsT8HYConI/AAAAAAAAAIg/fl3t6ynJFi4/s320/2008-07-22_140129.jpg" alt="" id="BLOGGER_PHOTO_ID_5276833311887630962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;FlowLayout使用方式&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;順序型FlowLayout版面配置是預設的版面配置方式，就如同範例程式按鈕測試2.java中，當我們並未指定版面配置方式時，則自動採用此種配置。FlowLayout由左而右，由上而下一顯示視窗可以容納的方式配置所有的元件。 &lt;p&gt;&lt;span id="more-1031"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;類別FlowLayout屬java.awt類別庫，其建構方法有以下三種：&lt;br /&gt;FlowLayout()&lt;br /&gt;FlowLayout(int 對齋方式)&lt;br /&gt;FlowLayout(int 對齊方式, int 水平間距, int 垂直間距)&lt;/p&gt; &lt;p&gt;第一種建構方法是建立一個預設的版面配置，它會將元件置中，而且每個元件之水平與垂直方向保留5個像素(pixel)的間隔，第二種方式可以指定元件的對齊方式，對齊方式的值已在FlowLayout類別中定義，有以下三種：&lt;br /&gt;FlowLayout.LEFT  (表示向左對齊)&lt;br /&gt;FlowLayout.CENTER (表示向中對齊)&lt;br /&gt;FlowLayout.RIGHT (表示向右對齊)&lt;br /&gt;第三種的FlowLayout類別的建構方法除了可以指定元件的對齊方式外，也可以指定元件之間水平與垂直的間距，間距以像素為計算單位。&lt;br /&gt;例如，若我們在程式按鈕測試2.java中第7行之前加入&lt;br /&gt;setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20));&lt;br /&gt;除了可以指定所有的按鈕元件向左靠齊外，也可以指定元件間水平間距是10像素，垂直間距是20像素。&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;GridLayout&lt;/span&gt;&lt;/p&gt;&lt;p&gt;GridLayout將家裡分成一格一格的小格子，家具放進去時，會按順序一格一格放進去&lt;br /&gt;GridLayout宣告如下：&lt;br /&gt;Public class GridLayout extends Object implements LayoutManager,Serializable&lt;br /&gt;項次GridLayout建構元&lt;br /&gt;1.GridLayout()&lt;br /&gt;建立一個GridLayout用來管理視窗的元件排放位置，預設元件由左至右排成一排，彼此間沒有空隙&lt;br /&gt;2.GridLayout (int rows, int cols)&lt;br /&gt;建立一個GridLayout，裡面有rows 列和cols 行的格子。元件與元件間的距離為0&lt;br /&gt;3.GridLayout (int rows, int cols, int hgap, int vgap)&lt;br /&gt;建立一個GridLayout，，裡面有rows 列和cols 行的格子，元件與元件間的距離，水平方向為Hgap ，而垂直方向為Vgap&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6648236360472666945-1991093791605731466?l=gamelifex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/1991093791605731466/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://gamelifex.blogspot.com/2008/12/javalayout.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/1991093791605731466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/1991093791605731466'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/2008/12/javalayout.html' title='JAVA的Layout'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BsYyM_o2_Pc/STsT8HYConI/AAAAAAAAAIg/fl3t6ynJFi4/s72-c/2008-07-22_140129.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6648236360472666945.post-2117353544895247060</id><published>2008-12-06T18:42:00.001+08:00</published><updated>2008-12-06T18:45:21.001+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>javax.sound的簡單使用</title><content type='html'>&lt;p&gt;來源：&lt;a id="Header1_HeaderTitle" href="http://blog.csdn.net/daniel_zwn/archive/2007/10/12/1822482.aspx"&gt;寧靜志遠 淡泊明志&lt;/a&gt;&lt;/p&gt;&lt;p&gt;昨天在QQ群上有人問題使用APPLET播放WAV的事情，自己還真沒有使用java 寫過多媒體處理，在網上找了一下相關的文章，有提到JMF框架的，於是找來安裝一下，沒有深入的研究JMF，初步覺得，使用方便，但是同時也給運行環境增加額外的負擔。&lt;/p&gt; &lt;p&gt; 然後看到《用Java實現音頻播放》這篇文章，文章沒有作者信息，但是可以在天極找到原文。如有需要可以根據下邊的鏈接找到文章。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.yesky.com/SoftChannel/72342371961929728/20030618/1708754.shtml"&gt;用Java實現音頻播放&lt;/a&gt; &lt;/p&gt; &lt;p&gt;文章對javax.sound包的結構作了深入的講解，而且為MP3解碼提供的解決方案。最後介紹了一個簡單播放器的開發，因為篇幅，作者沒有把完 整的代碼送上，我仿照作者的思路，寫了個簡單的播放WAV文件的代碼，撇開複雜的線程，目的在展示播放WAV文件的實現代碼上。綿薄的功夫而已。&lt;/p&gt; &lt;p&gt;&lt;span class="Title"&gt;源代碼&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"&gt; &lt;div&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;package&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; test;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; java.awt.event.ActionEvent;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; java.awt.event.ActionListener;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; java.io.File;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; java.io.IOException;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.AudioFormat;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.AudioInputStream;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.AudioSystem;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.DataLine;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.LineUnavailableException;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.SourceDataLine;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.sound.sampled.UnsupportedAudioFileException;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.swing.JButton;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.swing.JFileChooser;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.swing.JFrame;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; javax.swing.filechooser.FileFilter;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /&gt;&lt;br /&gt;&lt;img id="_587_621_Open_Image" onclick="this.style.display='none'; document.getElementById('_587_621_Open_Text').style.display='none'; document.getElementById('_587_621_Closed_Image').style.display='inline'; document.getElementById('_587_621_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /&gt;&lt;img id="_587_621_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_587_621_Closed_Text').style.display='none'; document.getElementById('_587_621_Open_Image').style.display='inline'; document.getElementById('_587_621_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span id="_587_621_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;/** */&lt;/span&gt;&lt;span id="_587_621_Open_Text"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;/**&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt; * &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;@author&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; Administrator&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt; *&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img id="_661_2607_Open_Image" onclick="this.style.display='none'; document.getElementById('_661_2607_Open_Text').style.display='none'; document.getElementById('_661_2607_Closed_Image').style.display='inline'; document.getElementById('_661_2607_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /&gt;&lt;img id="_661_2607_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_661_2607_Closed_Text').style.display='none'; document.getElementById('_661_2607_Open_Image').style.display='inline'; document.getElementById('_661_2607_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; WavPlayer &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; JFrame &lt;/span&gt;&lt;span id="_661_2607_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_661_2607_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img id="_664_676_Open_Image" onclick="this.style.display='none'; document.getElementById('_664_676_Open_Text').style.display='none'; document.getElementById('_664_676_Closed_Image').style.display='inline'; document.getElementById('_664_676_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_664_676_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_664_676_Closed_Text').style.display='none'; document.getElementById('_664_676_Open_Image').style.display='inline'; document.getElementById('_664_676_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;    &lt;/span&gt;&lt;span id="_664_676_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;/** */&lt;/span&gt;&lt;span id="_664_676_Open_Text"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;/**&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;     *&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;     &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; AudioInputStream ais;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; String fileUrl&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WindowsDing.wav&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;文件過濾器&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img id="_804_1111_Open_Image" onclick="this.style.display='none'; document.getElementById('_804_1111_Open_Text').style.display='none'; document.getElementById('_804_1111_Closed_Image').style.display='inline'; document.getElementById('_804_1111_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_804_1111_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_804_1111_Closed_Text').style.display='none'; document.getElementById('_804_1111_Open_Image').style.display='inline'; document.getElementById('_804_1111_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MyFilter  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; FileFilter&lt;/span&gt;&lt;span id="_804_1111_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_804_1111_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        @Override&lt;br /&gt;&lt;img id="_854_991_Open_Image" onclick="this.style.display='none'; document.getElementById('_854_991_Open_Text').style.display='none'; document.getElementById('_854_991_Closed_Image').style.display='inline'; document.getElementById('_854_991_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_854_991_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_854_991_Closed_Text').style.display='none'; document.getElementById('_854_991_Open_Image').style.display='inline'; document.getElementById('_854_991_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;boolean&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; accept(File arg0) &lt;/span&gt;&lt;span id="_854_991_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_854_991_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated method stub&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(arg0.getName().endsWith(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.wav&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; )&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;||&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; arg0.isDirectory())&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        @Override&lt;br /&gt;&lt;img id="_1039_1105_Open_Image" onclick="this.style.display='none'; document.getElementById('_1039_1105_Open_Text').style.display='none'; document.getElementById('_1039_1105_Closed_Image').style.display='inline'; document.getElementById('_1039_1105_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1039_1105_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1039_1105_Closed_Text').style.display='none'; document.getElementById('_1039_1105_Open_Image').style.display='inline'; document.getElementById('_1039_1105_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; String getDescription() &lt;/span&gt;&lt;span id="_1039_1105_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1039_1105_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated method stub&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;波形文件（.wav)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;       &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;   &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;   &lt;br /&gt;&lt;img id="_1129_2540_Open_Image" onclick="this.style.display='none'; document.getElementById('_1129_2540_Open_Text').style.display='none'; document.getElementById('_1129_2540_Closed_Image').style.display='inline'; document.getElementById('_1129_2540_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1129_2540_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1129_2540_Closed_Text').style.display='none'; document.getElementById('_1129_2540_Open_Image').style.display='inline'; document.getElementById('_1129_2540_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;    WavPlayer()&lt;/span&gt;&lt;span id="_1129_2540_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1129_2540_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;super&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        setSize(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;150&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;150&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        JButton startBut&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; JButton(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;播放&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img id="_1249_2476_Open_Image" onclick="this.style.display='none'; document.getElementById('_1249_2476_Open_Text').style.display='none'; document.getElementById('_1249_2476_Closed_Image').style.display='inline'; document.getElementById('_1249_2476_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1249_2476_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1249_2476_Closed_Text').style.display='none'; document.getElementById('_1249_2476_Open_Image').style.display='inline'; document.getElementById('_1249_2476_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;        startBut.addActionListener(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ActionListener()&lt;/span&gt;&lt;span id="_1249_2476_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1249_2476_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;br /&gt;&lt;img id="_1301_2468_Open_Image" onclick="this.style.display='none'; document.getElementById('_1301_2468_Open_Text').style.display='none'; document.getElementById('_1301_2468_Closed_Image').style.display='inline'; document.getElementById('_1301_2468_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1301_2468_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1301_2468_Closed_Text').style.display='none'; document.getElementById('_1301_2468_Open_Image').style.display='inline'; document.getElementById('_1301_2468_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; actionPerformed(ActionEvent arg0) &lt;/span&gt;&lt;span id="_1301_2468_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1301_2468_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated method stub&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                JFileChooser jfc&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; JFileChooser();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                jfc.setFileFilter(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MyFilter());&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(jfc.showOpenDialog(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;JFileChooser.APPROVE_OPTION)&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    fileUrl&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;jfc.getSelectedFile().getAbsolutePath();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;               &lt;br /&gt;&lt;img id="_1574_2139_Open_Image" onclick="this.style.display='none'; document.getElementById('_1574_2139_Open_Text').style.display='none'; document.getElementById('_1574_2139_Closed_Image').style.display='inline'; document.getElementById('_1574_2139_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1574_2139_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1574_2139_Closed_Text').style.display='none'; document.getElementById('_1574_2139_Open_Image').style.display='inline'; document.getElementById('_1574_2139_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span id="_1574_2139_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1574_2139_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    ais&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;AudioSystem.getAudioInputStream(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; File(fileUrl));&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    AudioFormat af&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ais.getFormat();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    SourceDataLine sdl&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    DataLine.Info info&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; DataLine.Info(SourceDataLine.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,af);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(SourceDataLine) AudioSystem.getLine(info);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl.open(af);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl.start();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                   &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;play&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                   &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; nByte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] buffer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;128&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;];&lt;br /&gt;&lt;img id="_1959_2110_Open_Image" onclick="this.style.display='none'; document.getElementById('_1959_2110_Open_Text').style.display='none'; document.getElementById('_1959_2110_Closed_Image').style.display='inline'; document.getElementById('_1959_2110_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_1959_2110_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1959_2110_Closed_Text').style.display='none'; document.getElementById('_1959_2110_Open_Image').style.display='inline'; document.getElementById('_1959_2110_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(nByte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;!=-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span id="_1959_2110_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_1959_2110_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                        nByte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ais.read(buffer,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;128&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img id="_2015_2103_Open_Image" onclick="this.style.display='none'; document.getElementById('_2015_2103_Open_Text').style.display='none'; document.getElementById('_2015_2103_Closed_Image').style.display='inline'; document.getElementById('_2015_2103_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_2015_2103_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2015_2103_Closed_Text').style.display='none'; document.getElementById('_2015_2103_Open_Image').style.display='inline'; document.getElementById('_2015_2103_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(nByte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span id="_2015_2103_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_2015_2103_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; oByte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sdl.write(buffer, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, nByte);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                            System.out.println(oByte);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;                        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;                    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl.stop();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                   &lt;br /&gt;&lt;img id="_2181_2253_Open_Image" onclick="this.style.display='none'; document.getElementById('_2181_2253_Open_Text').style.display='none'; document.getElementById('_2181_2253_Closed_Image').style.display='inline'; document.getElementById('_2181_2253_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_2181_2253_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2181_2253_Closed_Text').style.display='none'; document.getElementById('_2181_2253_Open_Image').style.display='inline'; document.getElementById('_2181_2253_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (UnsupportedAudioFileException e) &lt;/span&gt;&lt;span id="_2181_2253_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_2181_2253_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated catch block&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                    e.printStackTrace();&lt;br /&gt;&lt;img id="_2277_2349_Open_Image" onclick="this.style.display='none'; document.getElementById('_2277_2349_Open_Text').style.display='none'; document.getElementById('_2277_2349_Closed_Image').style.display='inline'; document.getElementById('_2277_2349_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_2277_2349_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2277_2349_Closed_Text').style.display='none'; document.getElementById('_2277_2349_Open_Image').style.display='inline'; document.getElementById('_2277_2349_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (IOException e) &lt;/span&gt;&lt;span id="_2277_2349_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_2277_2349_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated catch block&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                    e.printStackTrace();&lt;br /&gt;&lt;img id="_2386_2458_Open_Image" onclick="this.style.display='none'; document.getElementById('_2386_2458_Open_Text').style.display='none'; document.getElementById('_2386_2458_Closed_Image').style.display='inline'; document.getElementById('_2386_2458_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_2386_2458_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2386_2458_Closed_Text').style.display='none'; document.getElementById('_2386_2458_Open_Image').style.display='inline'; document.getElementById('_2386_2458_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;                }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (LineUnavailableException e) &lt;/span&gt;&lt;span id="_2386_2458_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_2386_2458_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; TODO Auto-generated catch block&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                    e.printStackTrace();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;                }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;               &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;           &lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.getContentPane().add(startBut);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        setVisible(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;   &lt;br /&gt;&lt;img id="_2583_2605_Open_Image" onclick="this.style.display='none'; document.getElementById('_2583_2605_Open_Text').style.display='none'; document.getElementById('_2583_2605_Closed_Image').style.display='inline'; document.getElementById('_2583_2605_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /&gt;&lt;img id="_2583_2605_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2583_2605_Closed_Text').style.display='none'; document.getElementById('_2583_2605_Open_Image').style.display='inline'; document.getElementById('_2583_2605_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; main(String[] args)&lt;/span&gt;&lt;span id="_2583_2605_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"&gt;...&lt;/span&gt;&lt;span id="_2583_2605_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; WavPlayer();&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;span class="Title"&gt;需要指出的&lt;/span&gt;&lt;/p&gt; &lt;p&gt;需要指出的一點是，&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    DataLine.Info info&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; DataLine.Info(SourceDataLine.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,af);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(SourceDataLine) AudioSystem.getLine(info);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl.open(af);&lt;br /&gt;&lt;img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /&gt;                    sdl.start();&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color:#ff6600;"&gt;sourceDataLine在被寫入前需要被打開" sdl.start();" 這點作者沒有說明。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6648236360472666945-2117353544895247060?l=gamelifex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/2117353544895247060/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://gamelifex.blogspot.com/2008/12/javaxsound.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/2117353544895247060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/2117353544895247060'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/2008/12/javaxsound.html' title='javax.sound的簡單使用'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6648236360472666945.post-6956783017711371012</id><published>2008-12-04T07:15:00.001+08:00</published><updated>2008-12-04T07:17:44.109+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Swing ,AWT,SWT三種應用程序框架的性能比較</title><content type='html'>&lt;div class="postbody"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:宋体;"&gt;自&lt;/span&gt; &lt;span lang="EN-US"&gt;IBM&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;公司提供的跨平台&lt;/span&gt; &lt;span lang="EN-US"&gt;GUI&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;開發包&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;以來，越來越多受到廣大程序員的親睞，已經有不少程序員用它開發出美觀、高效、實用的桌面應用程序。這讓我們更有理由去探索&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;給我們帶來的驚奇。&lt;/span&gt; &lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;        SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;在外觀和性能上都超過了&lt;/span&gt; &lt;span lang="EN-US"&gt;awt/swing&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;，為什麼這樣說呢？下面簡單的測試程序會讓你一目瞭然。廢話也不多說，讓我們看程序。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;    下面讓我們寫一個簡單的程序來測試一下，程序只做一件事，就是用&lt;/span&gt; &lt;span lang="EN-US"&gt;Label&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;顯示&lt;/span&gt; &lt;span lang="EN-US"&gt;」Hello World!」&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;，我的測試環境是&lt;/span&gt; &lt;span lang="EN-US"&gt;JDK&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;1.5.0&lt;/st1:chsdate&gt;+Eclipse3.1&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;。看看在&lt;/span&gt; &lt;span lang="EN-US"&gt;AWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt; &lt;span lang="EN-US"&gt;SWING&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;下分別實現該效果所需要的時間和內存消耗。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;AWT_CODE:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.Frame;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.Label;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.event.WindowAdapter;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.event.WindowEvent;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;public class awtTest {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;public static void main(String[] args) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long memory = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long time = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;memory = Runtime.getRuntime().freeMemory();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;time = System.currentTimeMillis();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;Frame frame = new Frame();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;Label label = new Label();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;label.setText("Hello World!");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.add(label);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.setVisible(true);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.addWindowListener(new WindowAdapter() {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;public void windowClosing(WindowEvent we) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                            &lt;/span&gt;System.exit(0);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;});&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.pack();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(System.currentTimeMillis() - time);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(memory - Runtime.getRuntime().freeMemory());&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size:85%;"&gt;運行效果及所用的時間和內存值：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;v:shapetype id="_x0000_t75" coord spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" style="font-size:21600,21600;"&gt;&lt;span style="font-size:85%;"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/span&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;img onmousewheel="return bbimg(this)" style="" src="http://www.j2medev.com/Article/UploadFiles/200509/20050908153345279.jpg" onload="javascript:resizepic(this)" alt="" width="400" border="0" height="160" /&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;SWING_CODE:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import javax.swing.JFrame;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import javax.swing.JLabel;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.event.WindowAdapter;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import java.awt.event.WindowEvent;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;public class swingTest {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;public static void main(String[] args) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long memory = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long time = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;memory = Runtime.getRuntime().freeMemory();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;time = System.currentTimeMillis();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;JFrame frame = new JFrame();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;JLabel label = new JLabel();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;label.setText("Hello World!");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.add(label);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.setVisible(true);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.addWindowListener(new WindowAdapter() {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;public void windowClosing(WindowEvent we) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                            &lt;/span&gt;System.exit(0);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;});&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;frame.pack();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.print("Time:");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(System.currentTimeMillis() - time);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.print("Memory:");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(memory - Runtime.getRuntime().freeMemory());&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size:85%;"&gt;運行效果及所用的時間和內存值：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size:85%;"&gt;&lt;img onmousewheel="return bbimg(this)" src="http://www.j2medev.com/Article/UploadFiles/200509/20050908153442776.jpg" onload="javascript:resizepic(this)" alt="" width="400" border="0" height="160" /&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;SWT_CODE:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import org.eclipse.swt.widgets.Display;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import org.eclipse.swt.widgets.Shell;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import org.eclipse.swt.widgets.Label;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;import org.eclipse.swt.SWT;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;public class swtTest {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;public static void main(String[] args) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long memory = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;long time = &lt;st1:chmetcnv st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l"&gt;0L&lt;/st1:chmetcnv&gt;;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;memory = Runtime.getRuntime().freeMemory();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;time = System.currentTimeMillis();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;Display display = new Display();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;Shell shell = new Shell(display);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;Label label = new Label(shell, SWT.NONE);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;label.setText("Hello World!");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;shell.pack();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;label.pack();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;shell.open();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.print("Time:");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(System.currentTimeMillis() - time);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.print("Memory:");&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;System.out.println(Runtime.getRuntime().freeMemory() - memory);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;while(!shell.isDisposed()) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;if(!display.readAndDispatch()) {&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                            &lt;/span&gt;display.sleep();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;display.dispose();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;label.dispose();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size:85%;"&gt;運行效果及所用的時間和內存值：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size:85%;"&gt;&lt;img onmousewheel="return bbimg(this)" src="http://www.j2medev.com/Article/UploadFiles/200509/20050908153421491.jpg" onload="javascript:resizepic(this)" alt="" width="400" border="0" height="160" /&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;如果你仔細看代碼，你會發現在&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;的代碼中，我註解為&lt;/span&gt; &lt;span lang="EN-US"&gt;』***』&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;代碼處，與前兩者有所不同，這也我疑惑的地方，在整個程序運行中，運行後的剩餘內存居然比運行前的剩餘內存值大。接著，我在調試該程序的時候，我發現在&lt;/span&gt; &lt;span lang="EN-US"&gt;Shell shell = new Shell(display)&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;語句執行後，內存值有明顯的增加，如果你知道&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;底層是如何操作的，知道這是什麼原因引起的，請你&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;a href="mailto:numenzq@yahoo.com.cn"&gt;&lt;span style="font-family: 宋体;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&lt;u&gt;&lt;span style="color:#800080;"&gt;聯繫我&lt;/span&gt; &lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;並告訴我這是為什麼，我好做出修正。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;如果你是初學者，不知道怎麼運行&lt;/span&gt; &lt;span lang="EN-US"&gt;SWT&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;程序，其實很簡單的，只需要在你的工程的&lt;/span&gt; &lt;span lang="EN-US"&gt;Libraries&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;添加一個名為&lt;/span&gt; &lt;span lang="EN-US"&gt;org.eclipse.swt.win32.win32.x86_&lt;st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" st="on"&gt;3.1.0&lt;/st1:chsdate&gt;.jar&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;包，該包的位置在你的&lt;/span&gt; &lt;span lang="EN-US"&gt;Eclipse&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;的安裝目錄下的&lt;/span&gt; &lt;span lang="EN-US"&gt;\plugins\&lt;/span&gt; &lt;span style="font-family: 宋体;"&gt;文件夾裡。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;本文通過對 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit（AWT）GUI 工具包進行比較，可以幫助新應用程序的開發人員從中選擇適當的工具。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;您可以通過本文瞭解對每個工具包的基本特性的介紹，以及使用每個工具包的優缺點。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;簡介&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;developerWorks 上另外一些作者已經展示了如何在 Swing 和 SWT 之間很好地進行遷移（參見 參考資料）。本文的目標是幫助您在開始開發項目之前確定選擇使用哪個 GUI 工具包。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;但是首先我們要弄清一個問題：為什麼會有多個 Java™ GUI 工具包呢？最好的答案是，一個工具包並不能滿足所有的要求，最近也不會開發一個可以滿足所有要求的 GUI 工具包。每個工具包都有各自的優缺點，這樣就可以根據自己的需求和目標用戶來選擇適當的工具包。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;下面就讓我們來學習有關這些工具包的知識。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;AWT 概述&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Abstract Windows Toolkit（AWT）是最原始的 Java GUI 工具包。AWT 的主要優點是，它在 Java 技術的每個版本上都成為了一種標準配置，包括早期的 Web 瀏覽器中的 Java 實現；另外它也非常穩定。這意味著我們不需要單獨安裝這個工具包，在任何一個 Java 運行環境中都可以使用它，這一點正是我們所希望的特性。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;AWT 是一個非常簡單的具有有限 GUI 組件、佈局管理器和事件的工具包（參見 清單 1、清單 2 和 清單 3）。這是因為 Sun 公司決定為 AWT 使用一種最小公分母（LCD）的方法。因此它只會使用為所有 Java 主機環境定義的 GUI 組件。最終的結果非常不幸，有些經常使用的組件，例如表、樹、進度條等，都不支持。對於需要更多組件類型的應用程序來說，我們需要從頭開始創建這些組件。 這是一個很大的負擔。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 1. 基本的 AWT Class 樹（全部在 java.awt 包中， 「*」 表示抽象） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object CheckboxGroup *Component Button Canvas CheckBox Choice Container Panel Applet ScrollPane Window Dialog Frame Label List TextComponent TextArea TextField MenuComponent MenuItem CheckboxMenuItem Menu PopupMenu &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：另外幾個包中還有其他一些 AWT 組件，但是這是基本的組件集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 2. AWT 提供了下面的佈局管理器（全部在 java.awt 包中，「*」 表示接口） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;*LayoutManager FlowLayout GridLayout *LayoutManager2 BorderLayout CardLayout GridBagLayout  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：另外幾個包中還有一些 AWT 佈局管理器，很多都是為它們進行佈局的容器專門定製的，但是這是基本的佈局管理器集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 3. AWT 提供了以下事件（大部分在 java.awt.events 包中） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object EventObject AWTEvent ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent InputEvent KeyEvent MouseEvent MouseWheelEvent PaintEvent WindowEvent HierarchyEvent InputMethodEvent InvocationEvent ItemEvent TextEvent &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：其他幾個包中還有另外一些 AWT 事件，但是這是基本的事件集。這些是從更通用的事件生成的具體事件。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;通常對於 AWT 來說（也適用於 Swing 和 SWT），每個事件類型都有一個相關的 XxxListener 接口（XxxAdapter 的實現可能為空），其中 Xxx 是去掉 Event 後綴的事件名（例如，KeyEvent 事件的接口是 KeyListener），用來把事件傳遞給處理程序。應用程序會為自己感興趣處理的事件的事件源（GUI 組件或部件）進行註冊。有時監聽接口要處理多個事件。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;AWT 的一個很好的特性是它通常可以對 GUI 組件自動進行銷毀。這意味著您幾乎不需要對組件進行銷毀。一個例外是高級組件，例如對話框和框架。如果您創建了耗費大量主機資源的資源，就需要手動對其進行銷毀。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;AWT 組件是 「線程安全的（thread-safe）」，這意味著我們不需要關心在應用程序中是哪一個線程對 GUI 進行了更新。這個特性可以減少很多 GUI 更新的問題，不過使 AWT GUI 運行的速度更慢了。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;AWT 讓我們可以以自頂向下（top-down） 或自底向上（bottom-up） 或以任意組合順序來構建 GUI。自頂向下的意思是在創建子組件之前首先創建容器組件；自底向上的意思是在創建容器（或父）組件之前創建子組件。在後一種情況中，組件的存在並不依 賴於父容器，其父容器可以隨時改變。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;通常來說，AWT GUI 都是不可訪問的。系統並沒有為 AWT 程序員提供 API 來指定可訪問性信息。可訪問性（accessibility）處理的是殘疾人可以怎樣使用應用程序的問題。一個應用程序要想有很好的可訪問性，必須與運行 平台一起，讓殘疾人可以通過使用適當的輔助技術（提供其他用戶接口的工具）來使用這些應用程序。很多政府和企業都有一些強制要求應用程序為實現可訪問性而 採用的標準。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Sun 希望 Java 語言能夠成為一種 「編寫一次就可以隨處運行（write once, run everywhere，即 WORE）」 的環境。這意味著可以在一台機器上開發和測試 Java 代碼（例如在 Windows® 上），然後不經測試就可以在另外一個 Java 主機上運行同樣的 Java 代碼。對於大部分情況來說，Java 技術都可以成功實現這種功能，但是 AWT 卻是一個弱點。由於 AWT 要依賴於主機 GUI 的對等體（peer）控件（其中每個 AWT 組件都有一個並行的主機控件或者對等體）來實現這個 GUI，這個 GUI 的外觀和行為（這一點更重要）在不同的主機上會有所不同。這會導致出現 「編寫一次隨處測試（write once, test everywhere，即 WOTE）」 的情況，這樣就遠遠不能滿足我們的要求了。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;AWT 提供了一個豐富的圖形環境，尤其是在 Java V1.2 及其以後版本中更是如此。通過 Graphics2D 對象和 Java2D、Java3D 服務，我們可以創建很多功能強大的圖形應用程序，例如畫圖和製表包；結合使用 JavaSound，我們還可以創建非常有競爭力的交互式遊戲。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;Swing 概述&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Java Swing 是 Java Foundation Classes（JFC）的一部分，它是試圖解決 AWT 缺點的一個嘗試。在 Swing 中，Sun 開發了一個經過仔細設計的、靈活而強大的 GUI 工具包。不幸的是，這意味著我們又要花一些時間來學習 Swing 了，對於常見的情況來說，Swing 有些太複雜了。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Swing 是在 AWT 組件基礎上構建的。所有 Swing 組件實際上也是 AWT 的一部分。Swing 使用了 AWT 的事件模型和支持類，例如 Colors、Images 和 Graphics。Swing 組件、佈局管理器以及事件總結如下（參見 清單 4、清單 5 和 清單 6）。正如您可以看到的一樣，這些組件集比 AWT 提供的組件集更為廣泛，與 SWT 組件集相比也毫不遜色。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 4. 基本的 Swing Class 樹（全部在 javax.swing 包或其子包中，「*」 表示抽象類） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object *Component Container *JComponent *AbstractButton JButton JMenuItem JCheckBonMenuItem JMenu JRadioButonMenuItem *JToggleButton JCheckBox JRadioButton Box Filler JColorChooser JComboBox JDesktopIcon JFileChooser JInternalFrame JLabel JLayeredPane JDesktopPane JList JMenuBar JOptionPane JPanel JPopupMenu JProgressBar JRootPane JScrollBar JScrollPane JSeparator JSlider JSplitPane JTabbedPane JTable JTableHeader *JTextComponent JEditorPane FrameEditorPane JTextPane JTextArea JtextField JPasswordField JToolBar JToolTip JTree JViewport ScrollableTabViewport Panel Applet JApplet Window Dialog JDialog Frame JFrame JWindow &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 Swing 組件，但是這是基本的組件集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 5. Swing 提供了以下 LayoutManagers（全部在 javax.swing 包或其子包中，「*」 表示接口） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;*LayoutManager CenterLayout *LayoutManager2 BoxLayout OverlayLayout SpringLayout  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 Swing 佈局管理器，很多都是為它們所布局的容器而專門定製的，但是這是基本的佈局管理器集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 6. Swing 提供了以下事件（大部分在 javax.swing.events 包及其子包中） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object EventObject AWTEvent AncestorEvent ComponentEvent InputEvent KeyEvent MenuKeyEvent MouseEvent MenuDragMouseEvent InternalFrameEvent &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 AWT 事件，但是這是基本的事件集。這些是從更通用的事件生成的 「高級」 事件。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;為了克服在不同主機上行為也會不同的缺點，Swing 將對主機控件的依賴性降至了最低。實際上，Swing 只為諸如窗口和框架之類的頂層 組件使用對等體。大部分組件（JComponent 及其子類）都是使用純 Java 代碼來模擬的。這意味著 Swing 天生就可以在所有主機之間很好地進行移植。因此，Swing 通常看起來並不像是本地程序。實際上，它有很多外觀，有些模擬（儘管通常並不精確）不同主機的外觀，有些則提供了獨特的外觀。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Swing 對基於對等體的組件使用的術語是重量級（heavyweight），對於模擬的組件使用的術語是輕量級（lightweight）。實際上，Swing 可以支持在一個 GUI 中混合使用重量級組件和輕量級組件，例如在一個 JContainer 中混合使用 AWT 和 Swing 控件，但是如果組件產生了重疊，就必須注意繪製這些控件的順序。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Swing 無法充分利用硬件 GUI 加速器和專用主機 GUI 操作的優點。結果是 Swing 應用程序可能比本地 GUI 的程序運行速度都慢。Sun 花費了大量的精力來改進最近版本的 Swing （Java V1.4 和 1.5）的性能，這種缺點正在變得日益微弱。由於 Swing 的設計更加健壯，因此其代碼基礎也更堅實。這意味著它可以在一台健壯的機器上比 AWT 和 SWT 上運行得更好。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;除了具有更多的組件、佈局管理器和事件之外，Swing 還有很多特性使得自己比 AWT 的功能更加強大。下面是更為重要的幾個特性： &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;模型與視圖和控件分離  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;對於這個模型中的所有組件（例如按鈕、列表、表、樹、富文本）來說，模型都是與組件分離的。這樣可以根據應用程序的需求來採用模型，並在多個視圖之間進行共享。為了方便起見，每個組件類型都提供有默認的模型。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;可編程外觀  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;每個組件的外觀（外表以及如何處理輸入事件）都是由一個單獨的、可動態替換的實現來進行控制的。這樣我們就可以改變基於 Swing 的 GUI 的部分或全部外觀。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;呈現器和編輯器  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;大部分顯示模型內容的組件，例如列表、表和樹，都可以處理幾乎所有類型的模型元素。 這可以通過為每種組件類型和模型類型映射一個渲染器或編輯器來實現。例如，一個具有包含 java.util.Date 值的列的表可以有一些專用的代碼來呈現數據值和編輯數據值。每一列都可以有不同的類型。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;可訪問性  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;創建一個殘疾人可以訪問的 GUI 是非常重要的。Swing 為實現具有可訪問性的 GUI 提供了豐富的基礎設施和 API。這種支持是單獨的，但是如果主機上具有可訪問性支持，那麼它們應該集成在一起。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 一樣，Swing 可以支持 GUI 組件的自動銷毀。Swing 還可以支持 AWT 的自底向上和自頂向下的構建方法。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 不同，Swing 組件不是線程安全的，這意味著您需要關心在應用程序中是哪個線程在更新 GUI。如果在使用線程時出現了錯誤，就可能會出現不可預測的行為，包括用戶界面故障。有一些工具可以幫助管理線程的問題。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 類似，Swing 的一個優點是，它也是 Java 技術的一種標準配置。這意味著您不需要自己來安裝它了。不幸的是，Swing 已經有了很大的變化，因此它很容易變得依賴於最新版本的 Java 語言所提供的特性，這可能會強制用戶更新自己的 Java 運行時環境。 &lt;/p&gt;&lt;p align="center"&gt;&lt;br /&gt;                    &lt;/p&gt;                                                   &lt;p style="text-indent: 2em;"&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;SWT 概述&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 的概念相比，SWT 是一個低級的 GUI 工具包。JFace 是一組用來簡化使用 SWT 構建 GUI 的增強組件和工具服務。SWT 的構建者從 AWT 和 Swing 實現中學習了很多經驗，他們試圖構建一個集二者優點於一體而沒有二者的缺點的系統。從很多方面來說，他們已經成功了。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;SWT 也是基於一個對等體實現的，在這一點上它與 AWT 非常類似。它克服了 AWT 所面臨的 LCD 的問題，方法如下：定義了一組控件，它們可以用來構建大部分辦公應用程序或開發者工具，然後可以按照逐個主機的原則，為特定主機所沒有提供的控件創建模擬 控件（這與 Swing 類似）。對於大部分現代主機來說，幾乎所有的控件都是基於本地對等體的。這意味著基於 SWT 的 GUI 既具有主機外觀，又具有主機的性能。這樣就避免了使用 AWT 和 Swing 而引起的大部分問題。特定的主機具有一些低級功能控件，因此 SWT 提供了擴充（通常是模擬的）版本（通常使用 「C」 作為名字中的第一個字母），從而可以產生更一致的行為。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;在對等體工作方式上，SWT 與 AWT 不同。在 SWT 中，對等體只是主機控件上的一些封裝程序而已。在 AWT 中，對等體可以提供服務來最小化主機之間的差異（就是在這裡，AWT 碰到了很多行為不一致的問題）。這意味著 SWT 應用程序實際上就是一個主機應用程序，它必然會全部繼承主機的優點和缺點。這還意味著 SWT 不能完全實現 WORE 的目標；它更像是一種 WOTE 解決方案。這就是說，SWT 儘管不如 Swing 那麼優秀，但是它在創建可移植解決方案方面是很傑出的。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;SWT 部件、佈局和事件總結如下（參見 清單 7、清單 8 和 清單 9）。正如您可以看到的一樣，這些組件集比 AWT 提供的組件集更為廣泛，與 Swing 組件集相比也毫不遜色。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 7. 基本的 SWT Class 樹（大部分在 org.ecipse.swt.widgets 或 org.eclipse.swt.custom 包或子包中，「*」 表示抽象類，「!」 表示在 custom 包中，「~」 表示在其他包中） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object *Dialog ColorDialog DirectoryDialog FileDialog FontDialog MessageDialog PrintDialog *Widget Menu *Item CoolItem !CTabItem MenuItem TabItem TableColumn TableItem TableTreeItem ToolItem TrayItem TreeColumn TreeItem *Control Button Label ProgressBar Sash Scale Scrollable Composite ~Browser Canvas *~AbstractHyperlink ~Hyperlink ~ImageHyperlink *~ToggleHyperline ~TreeNode ~Twistie AnimatedProgress !CLabel Decorations Shell FormText StyledText TableCursor !CBanner !CCombo Combo CoolBar !CTabFolder ~ExpandableComposite ~Section ~FilteredList ~FilteredTree ~Form Group ~PageBook ProgressIndicator !SashForm !ScrolledComposite TabFolder Table TableTree ToolBar Tray Tree ViewForm List Text Slider &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 SWT 部件，但是這是基本的部件集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 和 Swing 佈局管理器類似，SWT 也提供了非常豐富的佈局部件集。佈局系統與嵌套容器一起使用，可以生成所需要的任何佈局算法。所有這 3 個 GUI 庫也可以支持對部件的定位實現絕對控制。SWT 沒有等效的 BorderLayout 部件，這一點非常令人失望。FormLayout 對於創建表單基本輸入來說非常好用。我認為 SWT 的佈局機制比 AWT/Swing 佈局部件集的使用更難學習。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 8. SWT 提供了以下佈局管理器（大部分在 org.eclipse.swt.layout 和 org.eclipse.swt.custom 包或子包中，「*」 表示接口，「!」 表示在 custom 包中） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;*Layout FillLayout FormLayout GridLayout RowLayout !StackLayout  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 SWT 佈局管理器，很多都是為它們所布局的容器而專門定製的，但是這是基本的佈局管理器集。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 和 Swing 事件系統一樣，SWT 提供了非常豐富的事件集。儘管這些事件並不能與 AWT/Swing 的事件一一對應（例如 AWT 和 Swing 的按鈕都會產生 ActionEvent 事件，而 SWT 的按鈕產生的則是 SelectionEvent 事件），但是它們通常都是等價的。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;清單 9. SWT 提供了以下事件（大部分在 org.eclipse.swt.events 包或 org.eclipse.swt.custom 包或其子包中，「*」 表示抽象，「!」 表示在 custom 包中） &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Object EventObject SWTEventObject TypedEvent AimEvent !BidiSegmentEvent ControlEvent !CTabFlolderEvent DisposeEvent DragSourceEvent DragTargetEvent !ExtendedModifyEvent focusEvent HelpEvent KeyEvent TraverseEvent VerifyEvent !LineBackgroundEvent !LineStyleEvent MenuEvent ModifyEvent MouseEvent PaintEvent SelectionEvent TreeEvent ShellEvent !TextChangedEvent !TextChangingEvent &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;注意：在另外幾個包中還有其他一些 SWT 事件，但是這是基本的事件集。這些是從更通用的事件生成的具體事件。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;很多 Swing 組件，例如 JTable，都有自己的模型。對應的 SWT 控件（例如 Table）則沒有；不過它們有自己的條目。條目通常用來限制顯示文本或通常很小的圖像（例如圖標）。為了提供一種類 Swing 的模型接口，SWT 使用了 JFace ContentProviders。這些組件可以在應用程序提供的模型（例如 List 或 Table 使用的 java.util.Array ）和用作視圖的控件之間充當一個橋樑。為了將任意模型對象格式化成條目，SWT 使用了 JFace LabelProviders，它們可以為任何模型對象生成一個文本或圖標格式。這可以對複雜模型對象的混合顯示進行限制。其他類似組件，例如 ColorProviders 和 LabelDecorators，可以增強對這些條目的顯示。對於 Tables 的特例來說，SWT 提供了 CellEditor，它可以臨時將任意 SWT 控件鏈接到一個 Table 單元格上，從而當作這個單元格的編輯器使用。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;SWT 不支持 GUI 控件的自動銷毀。這意味著我們必須顯式地銷毀所創建的任何控件和資源，例如顏色和字體，而不能利用 API 調用來實現這種功能。這種工作從某種程度上來說得到了簡化，因為容器控制了其子控件的自動銷毀功能。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;使用 SWT 只能自頂向下地構建 GUI。因此，如果沒有父容器，子控件也就不存在了；通常父容器都不能在以後任意改變。這種方法不如 AWT/Swing 靈活。控件是在創建時被添加到父容器中的，在銷毀時被從父容器中刪除的。而且 SWT 對於 style 位的使用只會在構建時進行，這限制了有些 GUI 控件的靈活性。有些風格只是一些提示性的，它們在所有平台上的行為可能並不完全相同。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 Swing 類似，SWT 組件也不是線程安全的，這意味著您必須要關心在應用程序中是哪個線程對 GUI 進行了更新。如果在使用線程時發生了錯誤，就會拋出異常。我認為這比不確定的 Swing 方法要好。有一些工具可以幫助管理線程的問題。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;如果所支持的操作系統提供了可訪問性服務，那麼 SWT GUI 通常也就具有很好的可訪問性。當默認信息不夠時，SWT 為程序員提供了一個基本的 API 來指定可訪問性信息。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;SWT 提供了一個有限的圖形環境。到目前為止，它對於 Java2D 和 Java3D 的支持還不怎麼好。Eclipse 使用一個名為 Draw2D 的組件提供了另外一種單獨的圖形編輯框架（Graphical Editing Framework，GEF），它可以用來創建一些繪圖應用程序，例如 UML 建模工具。不幸的是，GEF 難以單獨（即在整個 Eclipse 環境之外）使用。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;與 AWT 和 Swing 不同，SWT 和 JFace 並不是 Java 技術的標準配置。它們必須單獨進行安裝，這可以當作是 Eclipse 安裝的一部分，也可以當作是單獨的庫進行安裝。Eclipse 小組已經使它的安裝變得非常簡單，並且 SWT 可以與 Eclipse 分開單獨運行。所需要的 Java 檔案文件（JAR）和動態鏈接庫（DLL）以及 UNIX® 和 Macintosh 上使用的類似庫可以從 Eclipse Web 站點上單獨下載。JFace 庫需要您下載所有的 Eclipse 文件，並拷貝所需要的 JAR 文件。在下載所需要的文件之後，我們還需要將這些 JAR 文件放到 Java CLASSPATH 中，並將 DLL 文件放到系統 PATH 中。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;特性的比較&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;下表對 AWT、SWT 和 Swing 庫的很多特性進行了比較，這種比較並沒有按照任何特定順序來進行。儘管沒有完全列出所有特性，但是列出了很多最重要的特性。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;功能/角色/外表 AWT Swing SWT（風格）  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示靜態文本  Label  JLabel  Label, CLabel   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示多行靜態文本  Multiple Labels  具有 HTML 內容的 Multiple JLabels 或 JLabel  具有新行的 Multiple Labels 或 Label   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示多行格式化靜態文本  具有不同字體的 Multiple Labels  具有 HTML 內容的 JLabel  具有不同字體的 Multiple Labels   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;單行文本輸入  TextField  JTextField  Text(SWT.SINGLE)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;多行文本輸入  TextArea  JTextArea  Text(SWT.MULTI)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示圖像  N/A  JLabel  Label   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示文本和圖像  N/A  JLabel  CLabel   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;提示彈出幫助  N/A  組件的 setToolTip，JToolTip 子類  控件的 setToolTip   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;風格化的文本輸入  N/A  JEditorPane  StyledText   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;從條目列表中進行選擇  List  JList  List   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;簡單按下具有文本的按鈕  Button  JButton  Button(SWT.PUSH)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;簡單按下具有文本或圖像的按鈕  N/A  JButton  Button(SWT.PUSH)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;繪圖區域；可能用於定製控件  Canvas  JPanel  Canvas   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;選中/取消複選框  CheckBox  JCheckBox  Button(SWT.CHECK)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;單選按鈕選擇 CheckBoxGroup  ButtonGroup 和 Menu  Group 和 Menu   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;從一個下拉列表中選擇  Choice  JComboBox  Combo、CCombo   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;輸入文本或從下拉列表中選擇  N/A  JComboBox  Combo、CCombo   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;可滾動區域  ScrollPane  JScrollPane  創建 Scrollable 子類   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;頂層窗口  Dialog、Frame、Window  JDialog、JFrame、JWindow  具有不同風格的 Shell   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;通用窗口  Window  JWindow  Shell   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;框架窗口  Frame  JFrame  Shell(SWT.SHELL_TRIM)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;對話框窗口  Dialog  JDialog  Shell(SWT.DIALOG_TRIM)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;菜單  Menu  JMenu  Menu   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;MenuItem  MenuItem  JMenuItem  MenuItem   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;菜單快捷鍵  通用擊鍵  與 AWT 相同  依賴於主機的快捷鍵   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;彈出菜單  PopupMenu  JPopupMenu  Menu(SWT.POPUP)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;菜單條  MenuBar  JMenuBar  Menu(SWT.BAR)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示插入符號  N/A  Caret  Caret   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Web 瀏覽器  N/A  JTextPane（HTML 3.2）  Browser（通過嵌入式瀏覽器）   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;Web 頁面中的嵌入式控件  Applet  JApplet  主機控件（例如 OLE）   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;其他控件的通用容器  Panel  JPanel  Composite   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;其他控件的有邊界通用容器  Panel（如果是手工畫的）  具有 Border 的 JPanel  Composite(SWT.BORDER)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;其他控件的有邊界和標題的通用容器  N/A  具有 TitledBorder 的 JPanel  Group   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;單選按鈕（一個被選中）  Checkbox  JRadioButton  Button(SWT.RADIO)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;單選按鈕的控件擴充  CheckboxGroup  RadioButtonGroup  Group   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;箭頭按鈕  N/A  具有圖像的 JButton  Button(SWT.ARROW)   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;支持文本顯示方向  通過 ComponentOrientation  與 AWT 相同  很多組件都可以支持這種風格   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;焦點切換  Policy 和 Manager 對象  與 AWT 相同  下一個控件   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;定製對話框  Dialog 子類  JDialog 子類  Dialog 子類   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;訪問系統事件  EventQueue 服務  與 AWT 相同  Display 服務（不如 AWT 健壯）   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;系統訪問對話框  FileDialog  JColorChooser、JFileChooser  ColorDialog、DirectoryDialog、FileDialog、FontDialog、PrintDialog   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示簡單消息對話框  N/A（必須是 Dialog 子類）  JOptionPane 靜態方法  具有很多風格的 MessageBox   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示簡單提示對話框  N/A（必須是 Dialog 子類）  JOptionPane 靜態方法  N/A（JFace 中用來實現這種功能的子類）   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;佈局管理器 BorderLayout、CardLayout、FlowLayout、GridLayout、GridBagLayout AWT 加上 BoxLayout、CenterLayout、SpringLayout FillLayout、FormLayout、GridLayout、RowLayout、StackLayout &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;基本的繪圖控件  Canvas  JPanel  Canvas   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;基本繪圖  Graphics 和 Graphics2D 對象 —— 基本形狀和文本，任意 Shapes 和 Strokes、Bezier 以及文件  與 AWT 相同  GC 對象 —— 基本形狀和文本   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;繪圖轉換  Affine，合成  與 AWT 相同  N/A   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;離屏繪圖（Off screen drawing）  BufferedImage、drawImage  與 AWT 相同  Image、drawImage   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;雙緩衝區  手工  自動或手工  除非由主機控件提供，否則就是手工   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;打印  PrintJob 和 PrintGraphics  與 AWT 相同  向 Printer 設備繪圖   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;定製顏色  Color  與 AWT 相同  Color   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;定製字體  Font、FontMetrics  與 AWT 相同  Font   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;光標選擇  Cursor  與 AWT 相同  Cursor   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;圖像特性  從文件中加載，動態創建，可擴充地編輯  與 AWT 相同  從文件中加載，動態創建，基本編輯   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;輸入自動化  Robot  與 AWT 相同  N/A   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示工具條  N/A  JToolBar  ToolBar、CoolBar   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示進度條  N/A  JProgressBar  ProgressBar   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;將空間劃分成區域  N/A  JSplitPane  Sash 或 SashForm   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示一個分標籤頁的區域  N/A  JTabbedPane  TabFolder、CTabFolder   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示製表信息  N/A  JTable  Table   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;格式化表的列  N/A  TableColumn  TableColumn   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;顯示層次化信息  N/A  JTree  Tree   &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;從一定範圍的值中進行選擇 N/A JSlider Slider  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;從一組離散範圍的值中進行選擇 N/A JSpinner Scale  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;對於基本顯示的訪問 Toolkit、GraphicsConfiguration、GraphicsDevice 與 AWT 相同 Display  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;將條目添加到系統托盤（system tray）中 N/A N/A Tray  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;關鍵：N/A —— 不適用。在很多情況中，這種特性都可以通過創建定製控件或控件容器或利用其他定製編程來實現，不過實現的難度會有所不同。  &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;&lt;b&gt;結束語&lt;/b&gt; &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;本文對 Eclipse 的 Standard Windows Toolkit with JFace、Java 的 Swing 和 Abstract Windows Toolkit GUI 工具包進行了比較。通過此處提供的比較，您可以確定在自己的新應用程序中應該使用哪個 GUI 工具包。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;在大部分情況中，決定都是在 Swing 與結合了 JFace 的 SWT 之間進行的。通常來說，每個工具包都非常完整且功能強大，足以構建功能完善的 GUI，但是 Swing 通常要比單獨使用 SWT（不使用 JFace 時）更好。Swing 具有內嵌於 Java 技術的優點，是完全可移植的，無可爭議地是一種更好的架構。Swing 也具有高級圖形應用程序所需要的優點。SWT 具有可以作為本地應用程序實現的優點，這可以提高性能，並利用基於 SWT 的 GUI 來實現本地兼容性。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;如果您只為一種平台來開發系統，那麼 SWT 就具有主機兼容性方面的優點，包括與主機特性的集成，例如在 Windows 上對 ActiveX 控件的使用。 &lt;/p&gt;&lt;p style="text-indent: 2em;"&gt;（責任編輯：龔勳）              &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6648236360472666945-6956783017711371012?l=gamelifex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/6956783017711371012/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://gamelifex.blogspot.com/2008/12/swing-awtswt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/6956783017711371012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/6956783017711371012'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/2008/12/swing-awtswt.html' title='Swing ,AWT,SWT三種應用程序框架的性能比較'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6648236360472666945.post-8787703688941141833</id><published>2008-11-04T00:20:00.001+08:00</published><updated>2008-11-04T00:20:49.396+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>JAVA字串與整數的轉換</title><content type='html'>String → int&lt;br /&gt;&lt;br /&gt;   1. int i = Interger.parseInt(str);&lt;br /&gt;      或 int i = Integer.parseInt(str[, int radix])&lt;br /&gt;   2. int i = Interger.valueOf(str).intValue();&lt;br /&gt;&lt;br /&gt;int → String&lt;br /&gt;&lt;br /&gt;   1. String s = String.valueOf(i);&lt;br /&gt;   2. String s = Interger.toString(i);&lt;br /&gt;   3. String s = "" + i;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6648236360472666945-8787703688941141833?l=gamelifex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/8787703688941141833/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://gamelifex.blogspot.com/2008/11/java.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/8787703688941141833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/8787703688941141833'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/2008/11/java.html' title='JAVA字串與整數的轉換'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6648236360472666945.post-3044690801558133322</id><published>2008-09-26T21:35:00.002+08:00</published><updated>2008-09-26T21:37:21.108+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Eclipse使用技巧分享區</title><content type='html'>&lt;span class="javascript" id="text40626"&gt;前言：&lt;br /&gt;本來我都是使用JBuilderX當主力IDE、但使用了Eclipse後&lt;br /&gt;發現...Eclipse原來也這麼好用...漸漸的就愛上了它......&lt;br /&gt;Eclipse優點：免費、程式碼排版功能、有中文化包、可增&lt;br /&gt;設許多功能強大的外掛、支援多種作業系統(Windows、&lt;br /&gt;Linux、Solaris、Mac OSX)..等等。&lt;br /&gt;&lt;br /&gt;開此篇討論串的目的，是希望能將Eclipse的一些使用技巧集&lt;br /&gt;合起來...歡迎大家繼續補充下去...由於Eclipse的版本眾多&lt;br /&gt;，希望補充的先進們能順便說明一下您所使用的版本∼&lt;br /&gt;&lt;br /&gt;Eclipse網站：&lt;a href="http://www.eclipse.org/" target="_blank" class="ilink"&gt;http://www.eclipse.org/&lt;/a&gt;&lt;br /&gt;Eclipse中文化教學：&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=10&amp;amp;id=30014&amp;amp;sty=1&amp;amp;tpg=1&amp;amp;age=0" target="_blank" class="ilink"&gt;JavaWorld站內文章參考&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;(使用版本：Eclipse 2.1.2 Release + 中文化)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;熱鍵篇：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;Template：Alt + /&lt;/span&gt;&lt;br /&gt;修改處：視窗-&gt;喜好設定-&gt;工作台-&gt;按鍵-&gt;編輯-&gt;內容輔助。&lt;br /&gt;個人習慣：Shift+SPACE(空白)。&lt;br /&gt;簡易說明：編輯程式碼時，打sysout +Template啟動鍵，就&lt;br /&gt;會自動出現：System.out.println(); 。&lt;br /&gt;&lt;b&gt;設定Template的格式：視窗-&gt;喜好設定-&gt;Java-&gt;編輯器-&gt;範本。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;程式碼自動排版：Ctrl+Shift+F&lt;/span&gt;&lt;br /&gt;修改處：視窗-&gt;喜好設定-&gt;工作台-&gt;按鍵-&gt;程式碼-&gt;格式。&lt;br /&gt;個人習慣：Alt+Z。&lt;br /&gt;自動排版設定：視窗-&gt;喜好設定-&gt;Java-&gt;程式碼格式製作程式。&lt;br /&gt;樣式頁面-&gt;將插入tab(而非空白鍵)以內縮，該選項取消勾選&lt;br /&gt;，下面空格數目填4，這樣在自動編排時會以空格4作縮排。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;快速執行程式：Ctrl + F11&lt;/span&gt;&lt;br /&gt;個人習慣：ALT+X&lt;br /&gt;修改處：視窗-&gt;喜好設定-&gt;工作台-&gt;按鍵-&gt;執行-&gt;啟動前一次的啟動作業。&lt;br /&gt;簡易說明：第一次執行時，它會詢問您執行模式，&lt;br /&gt;設置好後，以後只要按這個熱鍵，它就會快速執行。&lt;br /&gt;&lt;alt+z(排版完)、atl+x(執行)&gt;..我覺得很順手^___^&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;自動匯入所需要的類別：Ctrl+Shift+O&lt;/span&gt;&lt;br /&gt;簡易說明：&lt;br /&gt;假設我們沒有Import任何類別時，當我們在程式裡打入：&lt;table class="java" bg border="0" cellpadding="3" cellspacing="1" style="color:#999999;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" bg valign="top" width="1" style="color:#dddddd;"&gt;&lt;pre&gt;&lt;span style="color:#555555;"&gt;1&lt;br /&gt;2&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td align="left" bg valign="top" style="color:#ffffff;"&gt;&lt;pre&gt;BufferedReader buf =&lt;br /&gt;&lt;span class="java-reserved_word"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; BufferedReader(&lt;span class="java-reserved_word"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; InputStreamReader(System.in));&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;此時Eclipse會警示說沒有匯入類別，這時我們只要按下Ctrl+Shift+O&lt;br /&gt;，它就會自動幫我們Import類別。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;查看使用類別的原始碼：Ctrl+滑鼠左鍵點擊&lt;/span&gt;&lt;br /&gt;簡易說明：可以看到您所使用類別的原始碼。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;將選取的文字註解起來：Ctrl+/&lt;/span&gt;&lt;br /&gt;簡易說明：Debug時很方便。&lt;br /&gt;修改處：視窗-&gt;喜好設定-&gt;工作台-&gt;按鍵-&gt;程式碼-&gt;註解&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;視景切換：Ctrl+F8&lt;/span&gt;&lt;br /&gt;個人習慣：Alt+S。&lt;br /&gt;修改處：視窗-&gt;喜好設定-&gt;工作台-&gt;按鍵-&gt;視窗-&gt;下一個視景。&lt;br /&gt;簡易說明：可以方便我們快速切換編輯、除錯等視景。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;密技篇：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;一套Eclipse可同時切換，英文、繁體、簡體顯示：&lt;/span&gt;&lt;br /&gt;1.首先要先安裝完中文化包。&lt;br /&gt;2.在桌面的捷徑後面加上參數即可，&lt;br /&gt;英文-&gt; -nl "zh_US"&lt;br /&gt;繁體-&gt; -nl "zh_TW"&lt;br /&gt;簡體-&gt; -nl "zh_CN"。&lt;br /&gt;(其它語系以此類推)&lt;br /&gt;像我2.1.2中文化後，我在我桌面的Eclipse捷徑加入參數-n1 "zh_US"。&lt;br /&gt;"C:\Program Files\eclipse\eclipse.exe" -n "zh_US"&lt;br /&gt;介面就會變回英文語系嚕。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;利用Eclipse，在Word編輯文書時可不必將程式碼重新編排：&lt;/span&gt;&lt;br /&gt;將Eclipse程式編輯區的程式碼整個複製下來(Ctrl+C)，直接貼(Ctrl+V)到&lt;br /&gt;Word或WordPad上，您將會發現在Word裡的程式碼格式，跟Eclipse&lt;br /&gt;所設定的完全一樣，包括字型、縮排、關鍵字顏色。我曾試過JBuilder&lt;br /&gt;、GEL、NetBeans...使用複製貼上時，只有縮排格式一樣，字型、顏&lt;br /&gt;色等都不會改變。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;外掛篇：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;外掛安裝：將外掛包下載回來後，將其解壓縮後，您會發現features、&lt;br /&gt;plugins這2個資料夾，將裡面的東西都複製或移動到Eclipse的features&lt;br /&gt;、plugins資料夾內後，重新啟動Eclipse即可。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;讓Eclipse可以像JBuilderX一樣使用拖拉方式建構GUI的外掛：&lt;/span&gt;&lt;br /&gt;1.Jigloo SWT/Swing GUI Builder ：&lt;br /&gt;&lt;a href="http://cloudgarden.com/jigloo/index.html" target="_blank" class="ilink"&gt;http://cloudgarden.com/jigloo/index.html&lt;/a&gt;&lt;br /&gt;下載此版本：Jigloo plugin for Eclipse (using Java 1.4 or 1.5)&lt;br /&gt;安裝後即可由檔案-&gt;新建-&gt;其它-&gt;GUI Form選取要建構的GUI類型。&lt;br /&gt;&lt;br /&gt;2.Eclipse Visual Editor Project：&lt;br /&gt;&lt;a href="http://www.eclipse.org/vep/" target="_blank" class="ilink"&gt;http://www.eclipse.org/vep/&lt;/a&gt;&lt;br /&gt;點選下方Download Page，再點選Latest Release 0.5.0進入下載。&lt;br /&gt;除了VE-runtime-0.5.0.zip要下載外，以下這2個也要：&lt;br /&gt;EMF build 1.1.1: (build page) (download zip) &lt;br /&gt;GEF Build 2.1.2: (build page) (download zip) &lt;br /&gt;&lt;br /&gt;3.0 M8版本，請下載：&lt;br /&gt;EMF build I200403250631&lt;br /&gt;GEF Build I20040330&lt;br /&gt;VE-runtime-1.0M1&lt;br /&gt;&lt;br /&gt;安裝成功後，便可由File-&gt;New-&gt;Visual Class開始UI設計。&lt;br /&gt;安裝成功後，即可由新建-&gt;Java-&gt;AWT與Swing裡選擇&lt;br /&gt;所要建構的GUI類型開始進行設計。VE必須配合著對應&lt;br /&gt;版本，才能正常使用，否則即使安裝成功，使用上仍會&lt;br /&gt;有問題。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;使用Eclipse來開發JSP程式：&lt;/span&gt;&lt;br /&gt;外掛名稱：lomboz(下載頁面)&lt;br /&gt;&lt;a href="http://forge.objectweb.org/project/showfiles.php?group_id=97" target="_blank" class="ilink"&gt;http://forge.objectweb.org/project/showfiles.php?group_id=97&lt;/a&gt;&lt;br /&gt;請選擇適合自己版本的lomboz下載，lomboz.212.p1.zip表示2.1.2版，&lt;br /&gt;lomboz.3m7.zip表示M7版本....以此類推。&lt;br /&gt;lomboz安裝以及設置教學：&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040213.html" target="_blank" class="ilink"&gt;Eclipse開發JSP-教學文件&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;Java轉exe篇：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;實現方式：Eclipse搭配JSmooth(免費)。&lt;br /&gt;1.先由Eclipse製作包含Manifest的JAR。&lt;br /&gt;&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=10&amp;amp;id=38974&amp;amp;sty=3&amp;amp;keywords=%BD%D0%B0%DDEcilpse+IDE%A6%B3%BB%73%A7%40JAR%C0%C9%AA%BA%A5%5C%AF%E0%B6%DC%A1%48" target="_blank" class="ilink"&gt;製作教學&lt;/a&gt;&lt;br /&gt;2.使用JSmooth將做好的JAR包裝成EXE。&lt;br /&gt;JSmooth下載頁面：&lt;br /&gt;&lt;a href="http://jsmooth.sourceforge.net/index.php" target="_blank" class="ilink"&gt;http://jsmooth.sourceforge.net/index.php&lt;/a&gt;&lt;br /&gt;3.製作完成的exe檔，可在有裝置JRE的Windows上執行。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;Eclipse-Java編輯器最佳設定：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;編輯器字型設定：工作台-&gt;字型-&gt;Java編輯器文字字型。&lt;br /&gt;(建議設定Courier New -regular 10)&lt;br /&gt;&lt;br /&gt;編輯器相關設定：視窗-&gt;喜好設定-&gt;Java-&gt;編輯器&lt;br /&gt;&lt;br /&gt;外觀：顯示行號、強調對稱顯示的方括號、強調顯示現行行、&lt;br /&gt;顯示列印邊距，將其勾選，Tab寬度設4，列印編距欄位設80。&lt;br /&gt;程式碼協助：採預設即可。&lt;br /&gt;語法：可設定關鍵字、字串等等的顯示顏色。&lt;br /&gt;附註：採預設即可。&lt;br /&gt;輸入：全部欄位都勾選。&lt;br /&gt;浮動說明：採預設即可。&lt;br /&gt;導覽：採預設即可。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;使自動排版排出來的效果，最符合Java設計慣例的設定：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;自動排版設定：視窗-&gt;喜好設定-&gt;Java-&gt;程式碼製作格式。&lt;br /&gt;&lt;br /&gt;換行：全部不勾選。&lt;br /&gt;分行：行長度上限設：80。&lt;br /&gt;樣式：只將強制轉型後插入空白勾選。&lt;br /&gt;內縮空格數目：設為4。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;Eclipse的教學文件：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=10&amp;amp;id=53905&amp;amp;sty=2" target="_blank" class="ilink"&gt;Eclipse 3.0系列熱鍵表 - 中英對照解說版 (by sungo)&lt;/a&gt; &lt;span style="color:red;"&gt;~New~&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=10&amp;amp;id=53262&amp;amp;sty=1&amp;amp;tpg=1&amp;amp;age=0" target="_blank" class="ilink"&gt;Window+GCC+CDT用Eclipse開發C、C++ (by sungo)&lt;/a&gt; &lt;span style="color:red;"&gt;~New~&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;其它：&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040303.html" target="_blank" class="ilink"&gt;擴充Eclipse的Java 開發工具(中文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040319.html" target="_blank" class="ilink"&gt;使用Eclipse開發J2EE 應用程式(中文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040305.html" target="_blank" class="ilink"&gt;使用Eclipse平台進行除錯(中文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040227.html" target="_blank" class="ilink"&gt;用Eclipse進行XML 開發(中文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.tw.ibm.com/developerWorks/tutorial/content/web/20040207.html" target="_blank" class="ilink"&gt;開發Eclipse外掛程式(中文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-106.ibm.com/developerworks/linux/library/os-i18n/?dwzone=linux" target="_blank" class="ilink"&gt; 國際化您的Eclipse外掛程式(英文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-106.ibm.com/developerworks/java/library/os-swing/" target="_blank" class="ilink"&gt;將Swing編輯器加入Eclipse(英文)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-106.ibm.com/developerworks/opensource/library/os-i18n2/?dwzone=opensource" target="_blank" class="ilink"&gt;如何測試你的Eclipse plug-in符合國際市場需求(英文)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;Eclipse的相關網站：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://eclipse-plugins.2y.net/eclipse/index.jsp" target="_blank" class="ilink"&gt;http://eclipse-plugins.2y.net/eclipse/index.jsp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.eclipseplugincentral.com/" target="_blank" class="ilink"&gt;http://www.eclipseplugincentral.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-900.ibm.com/developerWorks/cn/cnpapers.nsf/java-papers-bytopic?OpenView&amp;amp;Start=20&amp;amp;Count=20&amp;amp;Expand=20#20" target="_blank" class="ilink"&gt;Eclipse相關教學[簡體]&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="javascript" id="text40661"&gt;寫程式寫到很累了，想休息一下？？玩玩小Game是&lt;br /&gt;不錯的選擇，下面介紹使用Eclipse玩Game的Plug-in。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;補充外掛篇：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Eclipse-Games：&lt;br /&gt;&lt;a href="http://eclipse-games.sourceforge.net/" target="_blank" class="ilink"&gt;http://eclipse-games.sourceforge.net/&lt;/a&gt;&lt;br /&gt;版本選：Latest Release 3.0.1 (Release Notes) Sat, 3 Jan 2004&lt;br /&gt;&lt;br /&gt;外掛安裝完後，重新開啟Eclipse。&lt;br /&gt;視窗-&gt;自訂視景-&gt;其它-&gt;勾選Game Actions。&lt;br /&gt;再將Eclipse關閉，重新再啟動，就可以開始玩嚕。&lt;br /&gt;(共有4種：採地雷I、採地雷II、貪食蛇、倉庫番。)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;(Eclipse 2.1.2 +中文化 玩Game -倉庫番)&lt;/span&gt;     &lt;br /&gt;                      &lt;a href="http://www.javaworld.com.tw/jute/upload/2004/03/27/18548011.gif" target="_blank"&gt;&lt;img src="http://www.javaworld.com.tw/jute/upload/2004/03/27/18548011.gif" title="Click to view full 5.gif (500 X 347)" align="absmiddle" border="0" width="500" height="347" /&gt;&lt;/a&gt;                &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javaworld.com.tw/jute/user/info?uid=6856"&gt;&lt;span class="javascript" id="text40626"&gt;&lt;span style="color:hotpink;"&gt;&lt;b&gt;Author：sungo&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6648236360472666945-3044690801558133322?l=gamelifex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamelifex.blogspot.com/feeds/3044690801558133322/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://gamelifex.blogspot.com/2008/09/blog-post_26.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/3044690801558133322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6648236360472666945/posts/default/3044690801558133322'/><link rel='alternate' type='text/html' href='http://gamelifex.blogspot.com/2008/09/blog-post_26.html' title='Eclipse使用技巧分享區'/><author><name>Jason</name><uri>http://www.blogger.com/profile/00667801849417949181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://2.bp.blogspot.com/_BsYyM_o2_Pc/S8A0d9jcmJI/AAAAAAAAAOA/jkCxsQg-hCM/S220/%E7%B4%AF.bmp'/></author><thr:total>0</thr:total></entry></feed>
