關於SWT開發的一個坑——Invalid thread access

Button createCodeBtn = new Button(shell, SWT.CENTER);
		createCodeBtn.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
				try {
					if(txtXMLSrc.getText().trim().equals("") || txtCodeTo.getText().trim().equals("")) {
						lblErrorMsg.setVisible(true);
						new Timer().schedule(new TimerTask() {
							public void run() {
//								Display.getDefault().syncExec(new Runnable() {
//								    public void run() {
								    	lblErrorMsg.setVisible(false);
//								    }
//							    }); 
							}
						}, 3 * 1000);
						return;
					}
					Main.geneCode(txtXMLSrc.getText() ,txtCodeTo.getText());
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
		});

這裏我在按鈕createCodeBtn點擊事件中寫了個定時器new Timer(),定時器是用的匿名類實現的schedule方法,定時器做用是過3s就把lblErrorMsg設置爲隱藏。一開始報這個Invalid thread access我還覺得是由於匿名內部類傳參有問題,因而去查,試過各類final方法後來仍是不行,後來我偶然一查發現有篇帖子介紹SWT這個坑,因而試了下,的確就是這個Display.getDefault().syncExec(new Runnable()的坑。java


上面代碼我註釋掉這幾行就會報錯,正確作法就是不註釋。shell

相關文章
相關標籤/搜索