- 使用 ProgressMonitorDialog 對話框
ProgressMonitorDialog 是用於顯示進度條的對話框,它必須配合接口 IrunnableWithProgress 進行使 用, IRunnableWithProgress 定義了一個可監控進度的任務對象 , 針對具體的業務邏輯實現其 run(IProgressMonitor monitor) 方法即可,整個的用法如下代碼所示:
- ProgressMonitorDialog pmd = new ProgressMonitorDialog(window.getShell());
- IRunnableWithProgress rwp = new IRunnableWithProgress() {
- @Override
- public void run(IProgressMonitor monitor){
- //totalWork爲IProgressMonitor.UNKNOWN時表示不知道任務的總量
- //將在進度條上顯示一個來回移動的進度條
- monitor.beginTask("任務1" + "", IProgressMonitor.UNKNOWN);
- //TODO 相應的業務邏輯
- monitor.done();
- }
- }
- pmd.run(true, false, rwp);
方法 run(boolean fork,boolean canceled,IrunnableWithProgress p) 中,第一個參數 fork 表示是否在事件隊列(即 UI 線程)中運行,如果設置爲 false, 表示將在事件隊列中運行,第二個參數 canceled 表示任務是否能夠被取消。
執行 pmd.run(false, false, rwp) 時的進度條顯示:
- 使用 RCP 平臺的進度條服務 IProgressService ;
IProgressService 是 RCP 提供給客戶程序執行一個耗時任務的方便快捷的方法,具體用法如下
1)執行非UI的操作時
- IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
- progressService.busyCursorWhile(new IRunnableWithProgress(){
- public void run(IProgressMonitor monitor) {
- // 非UI線程,只能進行非UI的操作
- }
- });
2)執行UI的操作時
- progressService.runInUI(
- PlatformUI.getWorkbench().getProgressService(),
- new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) {
- // UI主線程,可進行UI操作
- }
- },
- Platform.getWorkspace().getRoot());
- 使用 Job 完成耗時任務將會自動顯示一個進度條
Job 默認支持進度條的顯示,啓動一個Job時會自動打開一個進度條,如果Job調用了方法setUser(true),將會彈出一個進度條對話框表示是用戶作業,如果setUser(true),則表示作業在後臺運行,進度條將在進度條視圖中運行。
- 在嚮導中實現進度條,調用方法如下:
IWizard w;
w.getContainer().run(fork, cancelable, runnable);
以上代碼表示在當前嚮導頁上運行一個可監控進度的任務;