亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 06:15:54
字體:
來源:轉載
供稿:網友
  不靈敏的圖形用戶界面會降低應用程序的可用性。當以下現象出現的時候,我們通常說這個用戶界面反應不靈敏。

  不響應事件的現象;

  沒有更新的現象;

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

  event-dispatching thread

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

  那么,什么是event-dispatching thread呢?單一線程規則:一旦一個Swing組件被實現(realized),所有的有可能影響或依靠于這個組件的狀態的代碼都應該在event-dispatching thread中被執行。而實現一個組件有兩種方式:

  對頂層組件調用show(), pack(), 或者setVisible(true);

  將一個組件加到一個已經被實現的容器中。

  單一線程規則的根源是由于Swing組件庫的大部分方法是對多線程不安全的。

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

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);
  執行之后的效果就是按鈕似乎定住了一段時間,直到Done.出現之后才彈起來。原因就是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]);
  這樣卻是實現了更新,但是還存在著以下的問題。雖然從感覺上,按鈕已經彈起來了,但是在Done.出現之前,我們卻無法按下這個按鈕??梢哉f按鈕還是定住了,只不過定在了彈起的狀態。調用重繪方法無法從根本上解決問題,因此我們需要尋求其他的方法。

進入討論組討論。
  使用多線程

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合小说区| 亚洲成人aaa| 亚洲欧美日韩天堂一区二区| 日韩中文字幕免费| 日本中文字幕成人| 91社区国产高清| 欧美精品在线观看| 国产精品旅馆在线| 欧洲亚洲妇女av| 国语自产精品视频在线看| 日韩精品中文字幕久久臀| 国产精品免费视频xxxx| 综合av色偷偷网| 亚洲午夜精品久久久久久久久久久久| 亚洲自拍偷拍一区| 国产精品久久久久久久久久三级| 日韩经典一区二区三区| 91深夜福利视频| 欧美激情久久久久久| 国产欧美va欧美va香蕉在线| 亚洲区在线播放| 国产日韩综合一区二区性色av| 久久99视频精品| 欧美一区深夜视频| 国产精品久久久久久久久久三级| 精品亚洲一区二区三区在线播放| 欧美激情一级二级| 国产脚交av在线一区二区| 国产成人精彩在线视频九色| 中日韩美女免费视频网址在线观看| 九九热精品视频在线播放| 欧美性猛交xxx| 亚洲xxxx在线| 国产成人在线视频| 色偷偷88888欧美精品久久久| 奇门遁甲1982国语版免费观看高清| 91在线色戒在线| 日本精品免费观看| 97国产在线视频| 国产成人高潮免费观看精品| 色综合视频一区中文字幕| 国产日韩在线看| 国产成人精品电影久久久| 中文字幕免费精品一区| 成人信息集中地欧美| 欧美精品激情在线观看| 亚洲伊人久久综合| 日韩av在线影院| 久久男人av资源网站| 136fldh精品导航福利| 国产精品96久久久久久又黄又硬| 久久中文久久字幕| 亚洲欧美日本伦理| 欧美亚洲在线播放| 亚洲а∨天堂久久精品9966| 精品久久久久人成| 久久精品国产免费观看| 国产欧美久久一区二区| 日韩成人小视频| 中文字幕欧美视频在线| 国产成人精品亚洲精品| 日韩hd视频在线观看| 亚洲国产另类 国产精品国产免费| 欧美精品激情视频| 日韩免费视频在线观看| 欧美整片在线观看| 日韩中文字幕精品视频| 久久国产加勒比精品无码| 欧美激情视频网站| 日韩成人在线视频观看| 日韩欧美国产高清91| 日韩成人激情视频| 国产精品6699| 亚洲午夜精品久久久久久性色| 国产精品日韩专区| 91国产精品91| 在线电影欧美日韩一区二区私密| 亚洲成人黄色在线| 亚洲欧洲自拍偷拍| 欧美wwwwww| 在线电影av不卡网址| 国产做受69高潮| 日韩精品视频中文在线观看| 国产精品视频99| 国产精品美女主播在线观看纯欲| 欧美色道久久88综合亚洲精品| 日韩一区视频在线| 国产精品入口免费视频一| 国产日韩精品一区二区| 欧美激情视频网| 亚洲一区精品电影| 正在播放国产一区| 成人激情在线观看| 久久亚洲私人国产精品va| 欧美日韩国产综合视频在线观看中文| 亚洲一区二区三| 亚洲精品视频在线观看视频| 欧美xxxx做受欧美| 国产精品极品在线| 国产精品久久久久一区二区| 亚洲一区二区三区视频| 亚洲人成在线观看网站高清| 亚洲一区二区在线播放| 国产欧美婷婷中文| 欧美一级淫片aaaaaaa视频| 成人在线精品视频| 另类天堂视频在线观看| 麻豆乱码国产一区二区三区| 中文字幕日韩精品在线观看| 日韩精品一二三四区| 少妇高潮久久77777| 国产精品第一区| 色狠狠av一区二区三区香蕉蜜桃| 亚洲国产欧美久久| 精品久久久久久久久中文字幕| 97超级碰在线看视频免费在线看| 91美女片黄在线观| 亚洲在线视频福利| 91国产精品91| 亚洲精品美女久久久久| 国产视频自拍一区| 亚洲精品v天堂中文字幕| 成人黄色影片在线| 国产精品美女www爽爽爽视频| 亚洲第一视频网| 国产精品99久久99久久久二8| 久久精品国产久精国产思思| 欧美大片在线看| 97色在线播放视频| 国产91露脸中文字幕在线| 久久久国产精品亚洲一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国内自拍欧美激情| 日韩在线视频观看正片免费网站| 国产精品久久久av久久久| 亚洲第一二三四五区| 欧美成人中文字幕| 97精品国产aⅴ7777| 欧美精品在线免费| 欧美国产日韩免费| 精品露脸国产偷人在视频| 中文字幕日韩免费视频| 69**夜色精品国产69乱| 2019国产精品自在线拍国产不卡| 日韩不卡中文字幕| 久久国产精品视频| 欧美成人免费视频| 久久夜色精品亚洲噜噜国产mv| 久久久91精品| 欧美成人精品一区二区三区| 国产精品女视频| 黄色成人av在线| 欧美一级高清免费播放| 亚洲香蕉伊综合在人在线视看| 欧美成人在线免费| 亚洲男人天天操| 91av在线免费观看视频| 欧美在线视频观看免费网站| 97香蕉超级碰碰久久免费软件| 高潮白浆女日韩av免费看| 欧美在线性视频| 日韩精品在线播放| 亚洲女人天堂成人av在线| 久久久精品网站|