您现在的位置是:首页 >

同步模式和异步模式 Eclipse的工具开发:异步作业调度[2]

火烧 2022-12-03 00:47:49 1039
Ecli e的工具开发:异步作业调度[2] ——此文章摘自《自己动手写开发工具 基于Ecli e的工具开发》定价 ¥  特价 ¥ 详细 gt gt //track li ktech c /?m_id=

Eclipse的工具开发:异步作业调度[2]  

    ——此文章摘自《自己动手写开发工具 基于Eclipse的工具开发》定价 ¥  特价 ¥ 详细>>//track linktech cn/?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);    dialog run(true true new IRunnableWithProgress() {        public void run(IProgressMonitor monitor)                throws InvocationTargetException InterruptedException        {            final int ticks = ;            monitor beginTask( 开始操作 ticks);            try            {                for (int i = ; i < ticks; i++)                {                    if (monitor isCanceled())                        throw new InterruptedException();                    monitor worked( );                }            } finally            {                monitor done();            }        }    });

    调用beginTask方法来完成任务 ticks 参数表示此任务有多少工作量 调用worked方法报告自上次报告以来当前完成的任务数量 在循环中不断通过isCanceled方法判断当前任务是否被用户取消 需要注意 要在finally中调用done方法完成任务 否则会出现进度对话框无法正常关闭的情况

同步模式和异步模式 Eclipse的工具开发:异步作业调度[2]

    除了ProgressMonitorDialog外 在Eclipse中还可以通过其他方式显示进度 比如IWorkbenchWindow 通过在工作台窗口的状态行中显示进度来实现此界面 WizardDialog在向导状态行中显示长时间运行的操作

    除了可以自己构造进度对话框来显示进度之外 我们还可以调用平台的进度服务 而且Eclipse也推荐使用平台的进度服务 这样可以使所有插件都将具有一致的进度表示 平台的进度服务定义为接口IProgressService 我们可以通过PlatformUI getWorkbench() getProgressService方法来调用系统的进度服务 例如     IProgressService progressService = PlatformUI getWorkbench()            getProgressService();    progressService busyCursorWhile(new IRunnableWithProgress() {        public void run(IProgressMonitor monitor)        {            //执行耗时的操作        }    });

    在调用Eclipse的方法或者第三方插件的一些方法的时候 有的方法要求传递一个实现了IProgressMonitor的实例进去 如果我们无法传递或者无需传递的时候 最好不要传递null值进去 而是要传递NullProgressMonitor的一个实例进去 此类位于 eclipse core runtime包下 它实现了 IProgressMonitor接口 但是所有方法都是给的空实现 传递此类就避免了被调用方法没有进行空指针判断而造成的麻烦

lishixinzhi/Article/program/Java/ky/201311/29187  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码