SWT多线程界面假死问题
这是一个用户文件上传的软件。
在点击了上传按钮之后触发下面的代码:
new Updater(display, bar, upload).start();upload.connect(util.getServer().getFtpServer(), 21,LinkHandler.USERNAME, LinkHandler.PASSWORD);upload.load(task.getClientPath(), task.getServerPath());
class Updater extends Thread { private Display display; private ProgressBar bar; private LinkHandler handler; public Updater(Display display, ProgressBar bar, LinkHandler handler) { super(); this.display = display; this.bar = bar; this.handler = handler; } @SuppressWarnings("static-access") @Override public void run() { int i = 0; while (handler.getProcess() != 100) { final int pro = (int) handler.getProcess(); System.out.println("第" + (++i) + "次,进度为" + pro + "%"); try { Thread.currentThread().sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("睡了第" + i + "次"); display.asyncExec(new Runnable() { public void run() { if (bar.isDisposed()) { handler.setProcess(100); return; } bar.setSelection(pro); System.out.println("修改完:" + pro); } }); System.out.println("第" + i + "次结束"); } }}