還好,eclipse為我們開(kāi)發(fā)插件提供了一個(gè)方便的UI線程包,大大的簡(jiǎn)化了很多底層復(fù)雜的東西.先看看幾個(gè)簡(jiǎn)單的概念.
1.SWT UI線程
SWT用的是操作系統(tǒng)直接支持的線程模式,程序會(huì)在主程序里運(yùn)行一個(gè)時(shí)間循環(huán)并依次在這個(gè)線程里響應(yīng)事件.看下面這段代碼,UI線程就是創(chuàng)建Display的那個(gè)線程.
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
shell.open ();
// 開(kāi)始事件循環(huán)
// 關(guān)掉窗口后
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
簡(jiǎn)單的小程序里,一個(gè)UI線程就能夠滿足需要了。但假如是長(zhǎng)時(shí)間的操作,你就最好不要用UI線程來(lái)做這些事,可以交給Job去做.它其實(shí)就是另外啟動(dòng)的線程,也就是等會(huì)我要說(shuō)的非UI線程.
2、Job
Job類由org.eclipse.core.runtime插件提供.它能夠讓客戶程序員輕松的在另外的線程中執(zhí)行代碼。看一個(gè)小例子:
Job job = new Job("My First Job") {
PRotected IStatus run(IProgressMonitor monitor) {
System.out.println("Hello World (from a background job)");
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule(); // start as soon as possible
Job的默認(rèn)優(yōu)先級(jí)是Job.Long,這里例子中的優(yōu)先級(jí)要比它高,只要調(diào)用Job#schedule(),它就會(huì)盡快在另外的線程中運(yùn)行run()中的代碼。再看一個(gè)小例子:
final Job job = new Job("Long Running Job") {
protected IStatus run(IProgressMonitor monitor) {
try {
while(hasMoreWorkToDo()) {
// do some work
// ...
if (monitor.isCanceled()) return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
} finally {
schedule(60000); // start again in an hour
}
}
};
job.addJobChangeListener(new JobChangeAdapter() {
public void done(IJobChangeEvent event) {
if (event.getResult().isOK())
postMessage("Job completed sUCcessfully");
else
postError("Job did not complete successfully");
}
});
job.setSystem(true);
job.schedule(); // start as soon as possible
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注