熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Eclipse的工具開發:異步作業調度[2]

2013-11-23 20:50:31  來源: Java開源技術 
    ——此文章摘自《自己動手寫開發工具基於Eclipse的工具開發》定價 特價 詳細>>http://tracklinktechcn/?m_id=dangdang&a_id=A&l=&l_type= width= height= border= nosave>

    public interface IRunnableWithProgress {
    public void run(IProgressMonitor monitor)
    throws InvocationTargetException InterruptedException;
    }

    這個類的使用和Runnable非常相似只要把任務放到run方法中就可以了最重要的是可以調用monitor來對當前進度顯示進行控制下面就是一個完整的進度條演示例子

    ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
    dialogrun(true true new IRunnableWithProgress() {
        public void run(IProgressMonitor monitor)
                throws InvocationTargetException InterruptedException
        {
            final int ticks = ;
            monitorbeginTask(開始操作 ticks);
            try
            {
                for (int i = ; i < ticks; i++)
                {
                    if (monitorisCanceled())
                        throw new InterruptedException();
                    monitorworked();
                }
            } finally
            {
                monitordone();
            }
        }
    });

    調用beginTask方法來完成任務ticks 參數表示此任務有多少工作量調用worked方法報告自上次報告以來當前完成的任務數量在循環中不斷通過isCanceled方法判斷當前任務是否被用戶取消需要注意要在finally中調用done方法完成任務否則會出現進度對話框無法正常關閉的情況

    除了ProgressMonitorDialog外在Eclipse中還可以通過其他方式顯示進度比如IWorkbenchWindow 通過在工作台窗口的狀態行中顯示進度來實現此界面WizardDialog在向導狀態行中顯示長時間運行的操作

    除了可以自己構造進度對話框來顯示進度之外我們還可以調用平台的進度服務而且Eclipse也推薦使用平台的進度服務這樣可以使所有插件都將具有一致的進度表示平台的進度服務定義為接口IProgressService我們可以通過PlatformUIgetWorkbench() getProgressService方法來調用系統的進度服務例如
    IProgressService progressService = PlatformUIgetWorkbench()
            getProgressService();
    progressServicebusyCursorWhile(new IRunnableWithProgress() {
        public void run(IProgressMonitor monitor)
        {
            //執行耗時的操作
        }
    });

    在調用Eclipse的方法或者第三方插件的一些方法的時候有的方法要求傳遞一個實現了IProgressMonitor的實例進去如果我們無法傳遞或者無需傳遞的時候最好不要傳遞null值進去而是要傳遞NullProgressMonitor的一個實例進去此類位於orgeclipsecoreruntime包下它實現了 IProgressMonitor接口但是所有方法都是給的空實現傳遞此類就避免了被調用方法沒有進行空指針判斷而造成的麻煩

right>[http://developcsaicn/Java_Eclipse/htm>]  []  


From:http://tw.wingwit.com/Article/program/Java/ky/201311/29187.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.