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