首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Eclipse RCP 開發:整合 ProgressView 顯示長時間任務進度

     編輯:Java 綜合教學

Eclipse RCP 開發:整合 ProgressView 顯示長時間任務進度

在開發 Eclipse RCP 應用程式時,為了提供良好的使用者體驗,我們通常需要在後台執行耗時操作(如檔案匯入、資料同步、報表產生等),並即時向使用者顯示執行進度。Eclipse 平台提供了 ProgressView 組件,專門用於在工作台中統一展示這些後台任務的進度狀態。本文將詳細記錄如何在 RCP 專案中整合並使用 ProgressView。

什麼是 ProgressView?

ProgressView 是 Eclipse 4.x 架構下的一個獨立外掛,它從原本的 Workbench 服務中解耦出來,專門負責收集並顯示 IProgressService 回報的任務進度。它以視圖的形式呈現,支援多任務並行顯示、取消操作、錯誤報告等功能,是構建專業級 RCP 應用的重要元件之一。

安裝 ProgressView 外掛

由於 ProgressView 不包含在標準的 Eclipse SDK 套件中,我們需要從官方更新站點手動安裝:

  1. 開啟 Eclipse IDE,選擇 Help → Install New Software...
  2. 在 "Work with" 欄位輸入更新站點 URL:
    https://hudson.eclipse.org/platform/job/eclipse4-progress-view/lastSuccessfulBuild/artifact/releng/org.eclipse.e4.ui.progress.update/target/repository/
  3. 等待載入完成後,勾選 Eclipse 4 Progress View,按步驟完成安裝並重啟 Eclipse。

建立 RCP 專案並引入外掛

  1. 新建一個 Eclipse RCP 專案(例如命名為 ProgressViewDemo),勾選 "Create a simple content" 以生成基礎應用結構。
  2. 開啟專案的 MANIFEST.MF,在 Dependencies 頁籤下的 Required Plug-ins 區域,點擊 Add... 按鈕,搜尋並加入 org.eclipse.e4.ui.progress 外掛。

在應用模型中註冊 ProgressView 元件

Eclipse 4 使用應用模型定義 UI 結構,我們需要透過 Add-ons 和 Parts 來啟用並顯示 ProgressView。

步驟 1:新增 Add-on 初始化進度服務

  • 開啟 Application.e4xmi,展開應用模型樹,右鍵點選 Add-ons → New Child → AddOn。
  • 設定屬性:
    • Class URI: bundleclass://org.eclipse.e4.ui.progress/org.eclipse.e4.ui.progress.ProgressViewAddon

    此 Add-on 會在應用啟動時自動初始化進度服務,確保後續任務能正確回報進度。

步驟 2:新增 Part 顯示進度視圖

  • 在應用模型中找到想要放置進度視圖的 Part Stack 或 Part Sash Container,右鍵新增 Part。
  • 設定屬性:
    • Element ID: 例如 progressViewPart
    • Label: 進度監控
    • URI: bundleclass://org.eclipse.e4.ui.progress/org.eclipse.e4.ui.progress.ProgressView
    • Closeable: false(建議不允許關閉)

編寫後台任務並回報進度

Eclipse 使用 Job API 管理後台任務。以下範例示範如何在按鈕點擊事件中建立一個模擬長時間運算的 Job,並透過 SubMonitor 精細回報進度:

button.addSelectionListener(new SelectionListener() {
    @Override
    public void widgetSelected(SelectionEvent arg0) {
        Job job = Job.create("資料匯入任務", monitor -> {
            SubMonitor subMonitor = SubMonitor.convert(monitor);
            subMonitor.beginTask("開始匯入資料...", 5000); // 總工作量 5000 單位

            for (int i = 0; i < 50; i++) {
                try {
                    Thread.sleep(500L); // 模擬耗時操作
                } catch (Exception e) {
                    e.printStackTrace();
                }
                subMonitor.worked(100); // 每次推進 100 單位
            }
            return Status.OK_STATUS;
        });
        job.schedule(); // 提交給 Job Manager 排程執行
    }

    @Override
    public void widgetDefaultSelected(SelectionEvent arg0) {}
});

關鍵點解析

  • Job.create():建立任務,第一個參數是任務名稱(會顯示在 ProgressView 中),第二個參數是實作 IJobFunction 的 Lambda 運算式。
  • SubMonitor:提供更細粒度的進度控制,支援巢狀子任務。beginTask() 設定總工作量,worked() 遞增已完成量。
  • job.schedule():將任務提交給 Eclipse Job Manager,由其負責排程、執行緒管理及進度事件分發。

執行效果

啟動應用後,點擊按鈕觸發任務,ProgressView 視圖將即時顯示:

  • 任務名稱:"資料匯入任務"
  • 進度條隨著 worked(100) 遞增
  • 狀態文字:"開始匯入資料..."
  • 完成後自動標記為 "Done",使用者可點擊查看詳細日誌或錯誤資訊

延伸閱讀

想深入了解 Eclipse Jobs API 的進階用法(如任務依賴、規則、排程器等),強烈推薦參考 Vogella 教學:
Eclipse Jobs Tutorial

總結

透過引入 org.eclipse.e4.ui.progress 外掛、在應用模型中註冊 ProgressViewAddon 與 ProgressView,並配合標準的 Job + SubMonitor API,我們可以輕鬆為 RCP 應用加入專業級的後台任務進度監控功能。這不僅提升了使用者體驗,也符合 Eclipse 4 架構的模組化設計理念。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved