]]>SWT涓殑Dispose鎿嶄綔娉曞垯http://www.tkk7.com/280211429/archive/2006/10/17/75686.html鍥藉己鍥藉己Tue, 17 Oct 2006 08:51:00 GMThttp://www.tkk7.com/280211429/archive/2006/10/17/75686.htmlhttp://www.tkk7.com/280211429/comments/75686.htmlhttp://www.tkk7.com/280211429/archive/2006/10/17/75686.html#Feedback0http://www.tkk7.com/280211429/comments/commentRss/75686.htmlhttp://www.tkk7.com/280211429/services/trackbacks/75686.html鍦ㄦ湰绔犺妭鐨勫墠涓閮ㄥ垎錛屼綘鐭ラ亾浜嗗垱寤篠WT鎺т歡錛岀浉搴旂殑鏈湴鎺т歡涔熻鍒涘緩浜嗐備篃灝辨槸璇達紝璋冪敤浜哠WT鐨勬瀯閫犲嚱鏁幫紝搴曞眰鐨勬湰鍦拌祫婧愪篃琚垱寤轟簡銆傛墍浠ュ鏋滀綘鍐欎笅濡備笅浠g爜錛岄偅涔堜綘灝卞垱寤轟簡涓涓猄WT棰滆壊瀵硅薄錛岄偅涔堜篃灝卞湪緋葷粺鐨勫簳灞傝祫婧愰噷鍒嗛厤浜嗕竴涓鑹茶祫婧愶細 Color color = new Color(display, 255, 0, 0); // Create a red Color 娉曞垯涓璇存槑浜嗗鏋滀綘鍒涘緩浜嗕粬錛岄偅涔堜綘灝辮鍦ㄤ嬌鐢ㄥ畬鏃墮噴鏀句粬錛屽儚涓嬮潰涓鏍鳳細 color.dispose(); // I create it, so I dispose it 浣嗘槸錛屽鏋滀綘娌℃湁浣跨敤鏋勯犲嚱鏁版潵鐢寵璧勬簮錛屼綘灝變笉鑳芥樉寮忕殑閲婃斁浠栥傛瘮濡傦紝鑰冭檻涓嬮潰鐨勪唬鐮侊細 Color color = display.getSystemColor(SWT.COLOR_RED); // Create a red Color 鍐嶄竴嬈★紝鑾峰緱浜嗗簳灞傚鉤鍙扮殑棰滆壊璧勬簮錛屼絾鏄病鏈夊垎閰嶄粬銆傛硶鍒欎竴灝辮涓嶈兘閲婃斁浠栥備負浠涔堜笉鍛紵鍥犱負榪欎釜涓嶅睘浜庝綘-浣犲彧鏄熺敤浜嗚繖涓祫婧愶紝鍏朵粬鐨勫璞℃湁鍙兘姝e湪浣跨敤瀹冩垨鑰呭皢瑕佷嬌鐢ㄥ畠銆傞噴鏀捐繖涓祫婧愪細鍙樺緱闈炲父涓ラ噸鐨勩?br />
娉曞垯浜岋細閲婃斁浜嗙埗鎺т歡錛屽瓙鎺т歡涔熻閲婃斁 瀵規瘡涓涓嬌鐢╪ew鍒涘緩鐨勬帶浠墮兘浣跨敤dispose()浼氬彉寰楅潪甯哥箒鐞愶紝浼氫嬌寰桽WT寰堝揩琚姏寮冦備絾鏄紝SWT鐨勮璁¤呮剰璇嗗埌浜嗚繖涓鐐癸紝鍒涘緩浜嗕竴縐嶉昏緫涓婂眰鍙犵殑鑷姩閲婃斁鏈哄埗銆傝繖鎰忓懗鐫錛屽綋涓涓猄hell琚噴鏀句簡錛屾墍鏈変笌Shell鏈夊叧鐨勬帶浠墮兘琚嚜鍔ㄩ噴鏀句簡銆備綘浼氬彂鐜幫紝姘歌繙涔熶笉浼氫嬌鐢╨abel.dispose()鍦ㄢ淗ello World鈥濈▼搴忛噷錛岀敋鑷充綘浣跨敤浜唍ew鏉ュ垱寤轟竴涓狶abel瀵硅薄銆傚綋鐢ㄦ埛鍏抽棴浜哠hell錛孡abel鎺т歡鑷姩鐨勯噴鏀句簡銆?br />涔熻浣犲湪鎯籌紝浣犳案榪滀笉闇瑕佽皟鐢╠ispose()錛岃繖閮ㄥ垎浠g爜鍙槸鍦ㄦ氮璐圭┖闂淬傚疄闄呬笂錛屾湁鍙兘鍐欎竴浜涚▼搴忥紝鎵鏈夌殑璧勬簮閮藉彧鏈変竴涓埗綾伙紝騫朵笖榪欎簺璧勬簮閮戒細鑷姩閲婃斁銆備絾鏄紝鑰冭檻涓涓嬩笅闈㈢殑鏀瑰彉Text涓瓧浣撶殑浠g爜銆傚涓嬶細 Text text = new Text(shell, SWT.BORDER); //Create the text field Font font = new Font(display, 鈥滱rial鈥? 4, SWT.BOLD); //Create the new font text.setFont(font); //Set the font into the text field 榪欎釜瀛椾綋瀵硅薄鍒涘緩鏃舵病鏈夌埗綾伙紝鎵浠ヤ笉浼氳鑷姩閲婃斁錛岀敋鑷沖綋Shell琚叧闂簡錛孴ext瀵硅薄璋冪敤浜哾ispose()銆備篃璁鎬綘浼氬浣跨敤font榪欎釜璐熸媴鑰屽彂鎬掞紝浣嗘槸鑰冭檻鍒皌ext娌℃湁鐞嗙敱瑕佸font璐熻矗-font涓嶅睘浜庝粬銆傚疄闄呬笂錛屼綘涔熻浼氫嬌鐢ㄨ繖涓狥ont瀵硅薄鍦ㄥ悇縐嶅悇鏍風殑鎺т歡涓婏紝鑷姩閲婃斁浼氬紩鍙戜竴緋誨垪鐨勯棶棰樸?br /> 鍙﹀錛?br />濡傛灉Java鍖呰9鐨勬湰鍦版帶浠朵緷鐒跺湪媧誨姩錛岃屼粬鎵灞炰簬鐨凷hell琚噴鏀句簡錛屽皢鍙戠敓浠涔堟儏鍐靛憿錛熸垨鑰呮墜鍔ㄨ皟鐢ㄦ帶浠剁殑dispose鏂規硶浼氭庝箞鏍峰憿錛熸湰鍦版帶浠朵細琚噴鏀懼悧錛熸垜浠槸鍚﹀彲浠ヨ皟鐢╦ava瀵硅薄鑰屼粬鐨勫簳灞傛湰鍦版帶浠朵笉瀛樺湪錛?br />絳旀褰撶劧鏄細鍙互錛佸鏋滀綘璋冪敤涓涓璞¤屼粬鐨勬湰鍦版帶浠跺凡緇忛噴鏀撅紝浼氬紩鍑轟竴浜涢夯鐑︺備竴鏃︿竴涓帶浠惰閲婃斁浜嗭紝鐢氳嚦浠栦緷鐒跺湪媧誨姩錛屽浠栧仛浠涔堥兘娌℃湁鐢ㄣ傛槸鐨勶紝Java瀵硅薄渚濈劧鍙敤錛屼絾鏄簳灞傜殑瀵瑰簲鐐瑰凡緇忛噴鏀句簡銆傞偅涔堝氨浼氬緱鍒頒竴涓猄WTException錛屾樉紺轟負鈥淲idget has been disposed鈥濄傝冭檻Listing 3-2鐨勪唬鐮併?br />Listing 3-2:Broken.java
CODE:
import org.eclipse.swt.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; public class Broken { public static void main(String[] args) { 聽 Display display = new Display(); 聽 Shell shell = new Shell(display); 聽 shell.setLayout(new RowLayout()); 聽 Text text = new Text(shell, SWT.BORDER); 聽 shell.open(); 聽 while (!shell.isDisposed()) 聽 { 聽 if (!display.readAndDispatch()) 聽 { 聽 聽 display.sleep(); 聽 } 聽 } 聽 System.out.println(text.getText()); // PROBLEM! 聽 display.dispose(); 聽 } }
浠g爜鍙互緙栬瘧鍜岃繍琛岋紝浣嗘槸鍦ㄥ叧闂簡涓葷獥鍙e悗鎺у埗鍙頒細鎵撳嵃鍑轟互涓嬬殑閿欒錛?br />Org.eclipse.swt.SWTException: Widget is disposed at org.eclipse.swt.SWT.error(SWT.java:2332) at org.eclipse.swt.SWT.error(SWT.java:2262) at org.eclipse.swt.widgets.Widget.error(Widget.java:385) at org.eclipse.swt.widgets.Control.getDisplay(Control.java:735) at org.eclipse.swt.widgets.Widget.isValidThread(Widget.java:593) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:315) at org.eclipse.swt.widgets.Text.getText(Text.java:705) at Broken.main(Verison.java:24)