亚洲av中文无码乱人伦在线r▽,亚洲XX00视频,亚洲AV成人一区二区三区观看http://m.tkk7.com/fengtaishao/JAVA太極zh-cnMon, 12 May 2025 19:16:34 GMTMon, 12 May 2025 19:16:34 GMT60完全解決java開發(fā)中的中文問題(側重struts)http://m.tkk7.com/fengtaishao/archive/2006/08/28/66124.html風太少風太少Mon, 28 Aug 2006 02:48:00 GMThttp://m.tkk7.com/fengtaishao/archive/2006/08/28/66124.htmlhttp://m.tkk7.com/fengtaishao/comments/66124.htmlhttp://m.tkk7.com/fengtaishao/archive/2006/08/28/66124.html#Feedback2http://m.tkk7.com/fengtaishao/comments/commentRss/66124.htmlhttp://m.tkk7.com/fengtaishao/services/trackbacks/66124.html?????? 在做java開發(fā)的過程中一開始就碰到中文問題,剛接觸到java時用的編譯器是JCreate,這是個非常好用簡單的java編譯器,
但他就在對中文的支持上有很大問題,當時我就在想中國這么大的國家為什么在世界上總是比不過那些小國家,最嚴重的是有日文開發(fā)文檔
就是沒有中文的,所以我們在開發(fā)java的時候總是會碰到中文問題。下面我就來說一下我在開發(fā)中是如何來處理中文的。
????? 首先講中文的字符的編碼,剛開始中文的編碼是GB2312后來發(fā)現(xiàn)他的常用字根本不能適應現(xiàn)在的需求,所以就在他的基礎上增加了很多
生僻字,不常用字得到了新的編碼GBK,我們一般來說都用GBK來實現(xiàn)我們的開發(fā),而如果說到國際化就不得不提Unicode (統(tǒng)一碼)顧名思
義是一個將世界上各種文字統(tǒng)一在一起的東東。由美國各大電腦廠商組成的Unicode策進會來推動。目的,推廣一個世界通用的編碼體制,
驚世界上所有常用的文字都涵蓋進去,從而減少個電腦商開發(fā)國外市場遇到的問題。
??????? 這些編碼系統(tǒng)也會互相沖突。也就是說,兩種編碼可能使用相同的數字代表兩個不同的字符,或使用不同的數字代表相同的字符。任何
一臺特定的計算機(特別是服務器)都需要支持許多不同的編碼,但是,不論什么時候數據通過不同的編碼或平臺之間,那些數據總會有損壞
的危險。
??? Unicode給每個字符提供了一個唯一的數字,不論是什么平臺,不論是什么程序,不論什么語言。Unicode標準已經被這些工業(yè)界的領導
們所采用,例如:Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys和其它許多公司。最新的標準都需要
Unicode,例如XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML等等,并且,Unicode是實現(xiàn)ISO/IEC 10646的正規(guī)方式。許多
操作系統(tǒng),所有最新的瀏覽器和許多其他產品都支持它。Unicode標準的出現(xiàn)和支持它工具的存在,是近來全球軟件技術最重要的發(fā)展趨勢。
?????? 而Unicode4.0后有了UTF (Unicode/UCS Transformation Format),Unicode推薦使用UTF-8和UTF-16兩種格式其中8和16指的是Bits數而不
是Bytes數。
UTF-16基本就是Unicode雙字節(jié)的實現(xiàn),加上一個應付未來需要的擴充編碼機制(很少用)
UTF-8 是一種不等幅的編碼方式,英數字(Ascii字碼)保持原狀,完全不受影響(因此不需要做轉換),而其他漢字資料須透過程序來轉換,
會[變胖],因為每個字需要額外一個或兩個Bytes來編碼。
?????? 下面我們來看看實戰(zhàn)中我是如何做的:
??? 1.web.xml
?配置過濾器
?

1 <!-- ?Filter?Configuration? -->
2 ? < filter >
3 ?? < filter - name > Set?Character?Encoding </ filter - name >
4 ?? < filter - class > cn.redstoneinfo.commons.web.EncodingFilter </ filter - class > ??
5 ? </ filter >
6

????
??? 2.EncodingFilter.java:

?1 ? // 這里設置的默認的編碼,可以在web.xml中設置,如果不設就用這里的
?2 ? protected ?String?encoding? = ? " UTF-8 " ;
?3
?4 ? protected ? boolean ?ignore? = ? true ;
?5
?6 ? /* ?
?7 ??*?@see?javax.servlet.Filter#init(javax.servlet.FilterConfig)
?8 ?? */

?9 ? public ? void ?init(FilterConfig?filterConfig)? throws ?ServletException? {
10 ??String?paramValue? = ?filterConfig.getInitParameter( " encoding " );
11 ?? if ?(paramValue? != ? null )? {
12 ??? this .encoding? = ?paramValue;
13 ??}

14 ??String?value? = ?filterConfig.getInitParameter( " ignore " );
15 ?? if ?(value? == ? null )
16 ??? this .ignore? = ? true ;
17 ?? else ? if ?(value.equalsIgnoreCase( " true " ))
18 ??? this .ignore? = ? true ;
19 ?? else ? if ?(value.equalsIgnoreCase( " yes " ))
20 ??? this .ignore? = ? true ;
21 ?? else
22 ??? this .ignore? = ? false ;
23 ?}

24

?

??? 3.Struts-config.xml:
?設置資源文件的路徑
?

1 < message - resources
2 ??parameter = " cn.redstoneinfo.oss.security.web.security-resource " ?key = " SECURITY_RES " ? null = " false " />
3 ??
4 ? < message - resources
5 ??parameter = " cn.redstoneinfo.oss.web.ApplicationResources " ? null = " false " />
6

??? 4.role-list.jsp
?頁面編碼和調用資源
?

?1 <% @?page?contentType = " text/html;?charset=UTF-8 " ?language = " java " %> ?
?2 ????????
?3 ? < oss:panel?label = " security.role.list.title " ?bundle = " SECURITY_RES " >
?4 ? < table?width = " 100% " >
?5 ? < tr? class = " tr1 " ?align = " center " ?height = " 25 " >
?6 ????? < td?width = " 5% " >
?7 ????? </ td >
?8 ????? < td? > ??
?9 ?? < bean:message?key = " app.common.name " ? />
10 ????? </ td >
11 ????? < td? >
12 ????? < bean:message?key = " app.common.activeDate " ? />
13 ????? </ td >
14 ????? < td >
15 ????? < bean:message?key = " app.common.inactiveDate " ? />
16 ????? </ td? >
17 ????? < td >
18 ????? < bean:message?key = " app.common.status " ? />
19 ????? </ td > ???
20 ????
21 ? </ tr >
22 ????????
23 ???????? < input?type = " button " ?value = " ???<bean:message?key= " app.common. new " /> " ? class = " buttonnew " ?onclick = " javascript:document.forms[0].act.value='add';?goUrlFormTarget('role.do',?'roleForm',?'roleTreeFrame'); " > ????
24

?
??? 5.ApplicationResources.properties
?

1 app.common.name? = ?名字
2 ?app.common.ip? = ?IP
3 ?app.common.port? = ?端口
4 ?app.common.status? = ?狀態(tài)?
5

??? 6.build.xml
?編譯資源文件生成Unicode

1 ? < native2ascii?src = " ${oss.src.dir} " ?encoding = " UTF-8 " ?dest = " ${target.dir}/WEB-INF/classes " >
2 ??? < include?name = " **/*.properties " ? />
3 ?? </ native2ascii > ??
4

??? 7.轉換后的ApplicationResources.properties
?

1 app.common.name? = ?\u540d\u5b57
2 ?app.common.ip? = ?IP
3 ?app.common.port? = ?\u7aef\u53e3
4 ?app.common.status? = ?\u72b6\u6001
5

??? 8.server.xml
?tomcat5.0以后post跟get提交方法不了不同的編碼處理,應該用下面的方式來處理
????

1 < Connector
2 ??port = " 8080 " ???????????????maxHttpHeaderSize = " 8192 "
3 ???????????????maxThreads = " 150 " ?minSpareThreads = " 25 " ?maxSpareThreads = " 75 "
4 ???????????????enableLookups = " false " ?redirectPort = " 8443 " ?acceptCount = " 100 "
5 ???????????????connectionTimeout = " 20000 " ?disableUploadTimeout = " true " ??URIEncoding = " UTF-8 " />
6

??? 9.界面
11.gif
??? 以上操作基本實現(xiàn)徹底消滅中文亂碼問題,當然還有其他更好的辦法和應用,我們這里只講struts的簡單應用中如何避免相應問題的處理辦法。



風太少 2006-08-28 10:48 發(fā)表評論
]]>
談談網站建設的價格http://m.tkk7.com/fengtaishao/archive/2006/07/03/56416.html風太少風太少Mon, 03 Jul 2006 13:54:00 GMThttp://m.tkk7.com/fengtaishao/archive/2006/07/03/56416.htmlhttp://m.tkk7.com/fengtaishao/comments/56416.htmlhttp://m.tkk7.com/fengtaishao/archive/2006/07/03/56416.html#Feedback0http://m.tkk7.com/fengtaishao/comments/commentRss/56416.htmlhttp://m.tkk7.com/fengtaishao/services/trackbacks/56416.html
首先我們的價格是根據設計水平和業(yè)務飽和程度來擬定的,基本上恕不折扣。我們不喜歡首先定一個很高的價格,然后大家花很多寶貴的時間來議價。因為這樣的方式和在菜場買菜或者是去那些服裝市場淘衣服沒什么區(qū)別:拼命的砍價還價,最終軟磨硬泡買了下來,結果回家的路上還在想"哎,其實還可以再便宜幾塊錢的,說不定人家也賣……"。一個標志的產生凝聚了設計師的心血和智慧,也蘊含了一個成功的愿景!它不是機械的流水線制造出來的產品,而是一個用智慧創(chuàng)造出來的獨特的藝術品。("中國制造"和"中國創(chuàng)造"對于中國而言意義是顯而易見的。)我們希望和有遠見的公司一起成長,也希望每一個和我們合作的公司都百年常青!

"你們太貴了,我們之前問過了很多公司都是一兩千甚至幾百元一個的……"
是的,還有很多只要幾百元,說不定還會連帶著把你的企業(yè)網站的域名空間及標志全做掉……但是請別忘了還有很多公司上萬一個呢。同樣是一套西服,有些只要幾十元,有些卻要上千上萬元,穿上以后的形象氣質,自己能感受,別人更能察覺。想要一個什么樣的形象,您做主!

"太貴了,不就是一個網站嗎,你們在電腦上面一下就弄出來了……"
記得有一個這樣的小故事,大概的意思是說某廠機器出了故障,自己修不了,請來外國技術人員,結果那技術人員圍著機器轉了幾圈,在故障的地方劃了一條線。問題解決了,付酬勞時,技術人員說要1000美元,那家工廠的人都覺不合理,只不過一條線,怎么值1000美元呢。技術人員的解釋是,劃一條線只值一美元就夠了,但知道在哪里劃線卻值999美元。
再比如:咖啡廳里的一杯咖啡可要價幾十甚至上百不等,拿上這些錢去買一袋咖啡,然后自己再慢慢泡不也一樣可以喝嗎?這又是為什么?建設網站也一樣,互聯(lián)網發(fā)展到今天,網站的功能也已經從原來單純的展示信息過度到互動、營銷的階段。越來越多的企業(yè)都意識到企業(yè)網站的重要性與必要性,網站設計的好壞,功能是否齊全在一定程度上都影響著企業(yè)、公司的整體對外形象。我想您一定也明白這樣的道理。

"我們也是剛剛創(chuàng)業(yè)的公司,沒有多少錢能夠投入到這方面來,能再便宜一點嗎?……"
如果您真的是剛剛起步,而且您的項目非常有前景,我們對您的事業(yè)也很有興趣,那么您是我們一直在尋找的合作伙伴之一。花上個幾百請個業(yè)務的人做完或購買自助建站式的服務,省錢又省力,但是效果毫無疑問,為一份長遠的事業(yè)建立最基本的形象是必要的,我們了解您的雄心壯志,也佩服您的胸襟和視野,因為我們和您一樣在創(chuàng)業(yè),成功的事業(yè)也是我們共同的追求!所以,我相信雙贏才是最好的結果。

我們專注而踏實的做好自己的事情——創(chuàng)意和設計。用心做設計,站在和您的同一視角和高度設身處地去體察您在企業(yè)營銷、展示進程中的困苦迷惑,和您共同探尋成功的理念及視覺上的最優(yōu)解決方案。如果您賞識我們、信任我們,我們很高興能和您合作。您能得到一個市場認可的專業(yè)的專業(yè)的品牌視覺形象和無可估量的公司愿景,我們也能得到相應的商業(yè)上的報酬和專業(yè)上的收獲,這是我們期待的雙贏合作!當然我們也不奢望所有的客戶都欣賞我們,我們追求那些彼此欣賞,彼此尊重,有著相同的價值取向的客戶做我們成功事業(yè)旅途中的好伙伴。讓我們成為朋友!


風太少 2006-07-03 21:54 發(fā)表評論
]]>
Struts的多模塊設計http://m.tkk7.com/fengtaishao/archive/2005/08/17/10295.html風太少風太少Wed, 17 Aug 2005 01:03:00 GMThttp://m.tkk7.com/fengtaishao/archive/2005/08/17/10295.htmlhttp://m.tkk7.com/fengtaishao/comments/10295.htmlhttp://m.tkk7.com/fengtaishao/archive/2005/08/17/10295.html#Feedback5http://m.tkk7.com/fengtaishao/comments/commentRss/10295.htmlhttp://m.tkk7.com/fengtaishao/services/trackbacks/10295.html

Struts在1.1以后的版本引入了模塊(Module)的概念,克服了1.0的并行開發(fā)所遇到的問題。但是模板的規(guī)劃往往又是比較麻煩,如果不注意,可能適得其反,影響你的開發(fā)速度。下面我們看看如何去規(guī)劃一個對模塊的Struts項目。

首先我們需要建立一個web的項目,接下來就要進行目錄規(guī)劃。如下圖:

1 首先確定項目的模塊,如此項目中包含兩個模塊:mFirst和mSecond,當然還有缺省模板。

2 本例子中考慮到使用XDoclet自動生成Struts配置和校驗文件,所以有些特殊性。在WEB-INF下建立兩個目錄mFirst和mSecond,用于模塊配置文件的存放。同時建立merge目錄,并包含相應的模塊目錄,主要存放XDoclet生成Struts配置文件所需要的合并文件。模板的java源碼和測試代碼也分別存放,這樣便于管理。為了包含某些不允許從瀏覽器端直接訪問的jsp文件,我們在WEB-INF下同時建立webpages目錄,該目錄下同時包含模塊目錄,主要存放各個模塊的受限文件。

3 本例中為了集成方便,所有編譯后的代碼均存在同一目錄下(WEB-INF\classes),編譯后的測試代碼同樣存在同一目錄下。

4 經過以上的設置,為XDoclet生成配置文件提供了方便,我們的原則是同一個模塊只有一個配置文件(struts-config.xml)和校驗文件(validation.xml)。

5 接下來我們只需在web.xml中進行模塊聲明即可,其他信息請參考struts的sample。
<init-param>
<param-name>config</param-name>
<param-value>WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/mFirst</param-name>
<param-value>WEB-INF/mFirst/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/mSecond</param-name>
<param-value>WEB-INF/mSecond/struts-config.xml</param-value>
</init-param>

6 完成這些信息以后,我們要注意一些事情:
struts-config.xml文件中的Controller聲明,由于我們將模板的jsp文件隱藏到WEB-INF目錄下,而不是在根目錄下直接建立模板目錄,所以必須設置forwardPattern,詳細信息請參考Struts文檔。請在每個模塊的struts-config.xml文件中添加以下代碼,在本例中為:
<controller forwardPattern="/WEB-INF/webpages/$M$P"/>
在每個模塊的properties資源文件中可能都有配置Struts默認的出錯信息,因為這些模塊都是獨立的。

7 接下來就是模塊的之間的切換問題,因為在現(xiàn)時過程必須需要解決的問題。其實很簡單,如果你想使用項目下絕對路徑(包含模塊目錄信息),只需將forward的contextRelative屬性值設置為true即可,這樣模塊之間切換也很容易實現(xiàn)。
<forward contextRelative="true" name="success"
path="/mSecond/second.do" redirect="false"/>

8 接下來就是你的代碼啦,可能你要在編碼中適當地考慮到項目模塊之間的關系。

總結:多模塊設計不太難,但是你也的考慮周全點,這樣會給你的開發(fā)帶來方便。在IntelliJ IDEA下,雖然在模塊比較多的情況下目錄很亂,通過設置excluded,讓你的目錄更整潔,這樣就可以關注你的模塊。在有些情況下,取消excluded,這樣你有可以把握項目全局。



風太少 2005-08-17 09:03 發(fā)表評論
]]>
用Swing編寫反應靈敏的圖形用戶界面http://m.tkk7.com/fengtaishao/archive/2005/03/23/2368.html風太少風太少Wed, 23 Mar 2005 06:31:00 GMThttp://m.tkk7.com/fengtaishao/archive/2005/03/23/2368.htmlhttp://m.tkk7.com/fengtaishao/comments/2368.htmlhttp://m.tkk7.com/fengtaishao/archive/2005/03/23/2368.html#Feedback0http://m.tkk7.com/fengtaishao/comments/commentRss/2368.htmlhttp://m.tkk7.com/fengtaishao/services/trackbacks/2368.html

用Swing編寫反應靈敏的圖形用戶界面

作者:徐皓

作者簡介

徐皓,北京航空航天大學計算機系本科生,你可以通過ertri@163.com與他聯(lián)系。

正文

不靈敏的圖形用戶界面會降低應用程序的可用性。當以下現(xiàn)象出現(xiàn)的時候,我們通常說這個用戶界面反應不靈敏。

  1. 不響應事件的現(xiàn)象;
  2. 沒有更新的現(xiàn)象;

這些現(xiàn)象在很大程度上與事件的處理方法相關,而在編寫Swing應用程序的時候,我們幾乎必然要編寫方法去響應鼠標點擊按鈕,鍵盤回車等事件。在這些方法中我們要編寫一些代碼,在運行時去觸發(fā)一些動作。常見動作包括查找,更新數據庫等。在這篇文章中通過對一個實例的分析,介紹了一些基本概念,常見的錯誤以及提出了一個解決方案。

event-dispatching thread

我們一定要記住,事件響應方法的代碼都是在event-dispatching thread中執(zhí)行的,除非你啟用另一個線程。

那么,什么是event-dispatching thread呢?在《Java Tutorial》[1]中,作者給出了一條單一線程規(guī)則:一旦一個Swing組件被實現(xiàn)(realized),所有的有可能影響或依賴于這個組件的狀態(tài)的代碼都應該在event-dispatching thread中被執(zhí)行。而實現(xiàn)一個組件有兩種方式:

  1. 對頂層組件調用show(), pack(), 或者setVisible(true);
  2. 將一個組件加到一個已經被實現(xiàn)的容器中。

單一線程規(guī)則的根源是由于Swing組件庫的大部分方法是對多線程不安全的,盡管存在一些例外。這些例外的情況可以在《Java Tutorial》[1]的相關章節(jié)找到,這里不再展開。

為了支持單一線程模型,Swing組件庫提供了一個專門來完成這些與Swing組件相關的操作的線程,而這一線程就是event-dispatching thread。我們的事件響應方法通常都是由這一線程調用的,除非你自己編寫代碼來調用這些事件響應方法。在這里初學者經常犯的一個錯誤就是在事件響應方法中完成過多的與修改組件沒有直接聯(lián)系的代碼。其最有可能的效果就是導致組件反應緩慢。比如以下響應按鈕事件的代碼:

String str = null;
this.textArea.setText("Please wait...");
try {
    //do something that is really time consuming
    str = "Hello, world!";
    Thread.sleep(1000L);
} catch (InterruptedException e) {
    e.printStackTrace();
}
this.textArea.setText(str);	

執(zhí)行之后的效果就是按鈕似乎定住了一段時間,直到Done.出現(xiàn)之后才彈起來。原因就是Swing組件的更新和事件的響應都是在event-dispatching thread中完成的,而事件響應的時候,event-dispatching thread被事件響應方法占據,所以組件不會被更新。而直到事件響應方法退出時才有可能去更新Swing組件。

為了解決這個問題,有人也許會試圖通過調用repaint()方法來更新組件:

final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
        
try {
    Thread.sleep(1000L);
}catch(InterruptedException e) {
    e.printStackTrace();
}
str[0] = "Done.";

jTextArea1.setText(str[0]);

但是這一個方法沒有起到預期的作用,按鈕仍然定住一段時間,在察看了repaint()方法的源代碼之后就知道原因了。

PaintEvent e = new PaintEvent(this, PaintEvent.UPDATE,
    new Rectangle(x, y, width, height));
Toolkit.getEventQueue().postEvent(e);		

repaint()方法實際上是在事件隊列里加了一個UPDATE的事件,而沒有直接去重畫組件,而且這一個事件只能等待當前的事件響應方法結束之后才能被分配。因此只有繞過分配機制直接調用paint方法才能達到目的。

final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.paint(this.getGraphics());
        
try {
    Thread.sleep(1000L);
}catch(InterruptedException e) {
    e.printStackTrace();
}
str[0] = "Done.";

jTextArea1.setText(str[0]);

這樣卻是實現(xiàn)了更新,但是還存在著以下的問題。雖然從感覺上,按鈕已經彈起來了,但是在Done.出現(xiàn)之前,我們卻無法按下這個按鈕。可以說按鈕還是定住了,只不過定在了彈起的狀態(tài)。調用重繪方法無法從根本上解決問題,因此我們需要尋求其他的方法。

使用多線程

有效的解決方法是使用多線程。首先看一看一個更好的解決方案,這一方案是在參考《Rethinking Swing Threading》[3]的一個程序片段完成的:

final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
        
new Thread() {
    public void run() {
        try {
            Thread.sleep(1000L);
        }catch(InterruptedException e) {
            e.printStackTrace();
        }
        str[0] = "Done.";
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                jTextArea1.setText(str[0]);
             }
        });
    }
}.start();

在這個程序中,要花費大量時間的操作被放到另一個線程當中,從而使事件響應方法能快速返回,event-dispatching thread就可以更新UI和響應其它事件了。注意到這個程序使用了invokeLater()方法。invokeLater()方法的作用是讓event-dispatching thread去運行制定的代碼。當然也可以不使用invokeLater()方法,但是這樣就違背了單一線程原則,同時帶來了一定程度的相對多線程的不安全性。到現(xiàn)在,解決方案似乎是完美的了,但是我們看一看在原來的程序添加下面的代碼,盡管我們通常不這樣做。

public void paint(java.awt.Graphics g) {
    super.paint(g);
    g.drawRect(1, 1, 100, 100);
}

我們會發(fā)現(xiàn)以前畫的矩形被覆蓋了一部分,原因是由于我們沒用重畫這一個矩形,因此在結尾加上對repaint()方法的調用。

final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
        
new Thread() {
    public void run() {
        try {
            Thread.sleep(1000L);
        }catch(InterruptedException e) {
            e.printStackTrace();
        }
        str[0] = "Done.";
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                jTextArea1.setText(str[0]);
                repaint();
             }
        });
    }
}.start();

如果你認為這段代碼過于缺乏可讀性,通過在《Java Tutorial》[1]里面介紹的SwingWorker來簡化編程的方法。可以通過實現(xiàn)一個construct()方法來實現(xiàn)花費大量時間的操作和重寫finished()方法來完成組件更新的工作。

this.jTextArea1.setText("Please wait...");
        
final SwingWorker worker = new SwingWorker() {
    public Object construct() {
        try {
            Thread.sleep(1000L);
        }catch(InterruptedException e) {
            e.printStackTrace();
        }
        return "Done.";
    }
    public void finished() {
        jTextArea1.setText(getValue().toString());
        repaint();
    }
};
worker.start();

在《Rethinking Swing Threading》[3],作者將以上的編程方式稱為同步方式。另外作者提出了一個通過消息機制來實現(xiàn)相同功能的更清晰,但是需要編寫更多代碼的"異步"的方法。

結論

總之,我們在編寫使用Swing組件的程序是要記住以下幾點:

1、不要過多地占用event-dispatching thread;

2、與更新組件相關的代碼要使用event-dispatching thread去執(zhí)行;

3、要更新組件。

編寫反應靈敏的圖形用戶界面還需要考慮很多問題,以上只是最基本的一部分。歡迎有興趣的讀者來信進行討論。

參考資料

[1]Sun Microsystems, The Java Tutorial Third Edition, java.sun.com

[2]Sun Microsystems, JavaTM 2 SDK, Standard Edition Documentation Version 1.4.2, java.sun.com

[3]Jonathan Simon, Rethinking Swing Threading, java.net



風太少 2005-03-23 14:31 發(fā)表評論
]]>
主站蜘蛛池模板: 久草免费福利资源站| 国产亚洲免费的视频看| 无码国产精品久久一区免费| 78成人精品电影在线播放日韩精品电影一区亚洲| 一级毛片免费在线观看网站| 一区二区三区亚洲视频| 九九免费观看全部免费视频| 亚洲国产精品成人AV无码久久综合影院 | 国产美女a做受大片免费| 亚洲人成无码网站在线观看 | eeuss免费影院| 亚洲精品你懂的在线观看| 99re8这里有精品热视频免费| 亚洲乱码中文字幕综合| 毛片在线全部免费观看| 亚洲精品第五页中文字幕| 无码国产精品一区二区免费式直播| 亚洲伊人久久大香线焦| 国产又大又黑又粗免费视频 | 亚洲韩国—中文字幕| 啦啦啦完整版免费视频在线观看| 亚洲人成人77777网站不卡| 在线播放高清国语自产拍免费 | 亚洲AV无码专区在线厂| 国产精品亚洲精品日韩已方| a毛片全部免费播放| 亚洲成人福利在线| 亚洲av无码不卡私人影院| 成人性生交大片免费看中文| 亚洲免费二区三区| 全黄a免费一级毛片人人爱| 成人影片一区免费观看| 亚洲 欧洲 日韩 综合在线| 亚洲精品成a人在线观看| 日韩免费无码一区二区三区| 亚洲一区二区三区乱码在线欧洲| 国产免费人人看大香伊| 国产激情免费视频在线观看| 亚洲精品无码成人片久久不卡 | 亚洲熟妇av一区二区三区下载| 成年性羞羞视频免费观看无限|