欢迎来到天天文库
浏览记录
ID:14439667
大小:70.50 KB
页数:23页
时间:2018-07-28
《自己动手写开发工具--基于eclipse的工具开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、自己动手写开发工具--基于Eclipse的工具开发户在打开那个数据导入窗口,单击【导入】按钮后就切换到另外一个窗口进行录单操作了。天呀,如果没有提供那个进度条的功能,那么用户单击【导入】按钮以后整个ERP系统就“死掉了”,用户就无法进行任何操作,也就无法做任何工作,难道这半个多小时要他去上网聊QQ、翻纸牌吗?在这一点上Eclipse做的无疑是非常好的。当我们新建一个项目的时候,如果项目的初始化时间比较长,Eclipse就会弹出一个带滚动条的窗口,提示用户正在初始化;对于一些耗时非常长的操作,比如从CVS检出代码,Eclipse会
2、弹出一个带有【在后台运行】按钮的进度对话框,如图3.3所示,用户单击【在后台运行】按钮以后,这个对话框就会关闭,这样用户就可以在Eclipse中进行其他的操作了,避免了长时间等待所造成的时间浪费。图3.3进度条我们最常接触的就是IProgressMonitor了,在很多方法中都要求传递此接口的实例,比如编辑器的doSave方法就是如下声明的:publicvoiddoSave(IProgressMonitormonitor)通过这个接口就可以操控进度条来显示我们当前的保存进度了。不过IProgressMonitor并不是进度条对话
3、框,它要“依靠”一个进度显示器来把进度显示出来,比如最常见的进度对话框ProgressMonitorDialog。部分任务在运行的时候可以由用户选择取消,当用户取消任务的时候,IProgressMonitor的isCanceled方法会返回true,因此我们在任务进行的时候要实时地去调用isCanceled方法,当发现任务被取消的时候要尽快结束任务。我们可以使用Java的标准接口Runnable来实现多线程任务运行,不过在Eclipse中又有了新的选择,那就是IRunnableWithProgress,其声明如下:publici
4、nterfaceIRunnableWithProgress{publicvoidrun(IProgressMonitormonitor)throwsInvocationTargetException,InterruptedException;}这个类的使用和Runnable非常相似,只要把任务放到run方法中就可以了,最重要的是可以调用monitor来对当前进度显示进行控制。下面就是一个完整的进度条演示例子。ProgressMonitorDialogdialog=newProgressMonitorDialog(shell);d
5、ialog.run(true,true,newIRunnableWithProgress(){publicvoidrun(IProgressMonitormonitor)throwsInvocationTargetException,InterruptedException{finalintticks=10000;monitor.beginTask("开始操作",ticks);try{for(inti=0;i6、ion();monitor.worked(1);}}finally{monitor.done();}}});调用beginTask方法来完成任务,ticks参数表示此任务有多少工作量,调用worked方法报告自上次报告以来当前完成的任务数量,在循环中不断通过isCanceled方法判断当前任务是否被用户取消。需要注意,要在finally中调用done方法完成任务,否则会出现进度对话框无法正常关闭的情况。除了ProgressMonitorDialog外,Eclipse中还可以通过其他方式显示进度,在比如IWorkbenchWind7、ow通过在工作台窗口的状态行中显示进度来实现此界面,WizardDialog在向导状态行中显示长时间运行的操作。除了可以自己构造进度对话框来显示进度之外,我们还可以调用平台的进度服务,而且Eclipse也推荐使用平台的进度服务,这样可以使所有插件都将具有一致的进度表示。平台的进度服务定义为接口IProgressService,我们可以通过PlatformUI.getWorkbench().getProgressService方法来调用系统的进度服务,例如:IProgressServiceprogressService=Platf8、ormUI.getWorkbench().getProgressService();progressService.busyCursorWhile(newIRunnableWithProgress(){publicvoidrun(IProgressMonitor
6、ion();monitor.worked(1);}}finally{monitor.done();}}});调用beginTask方法来完成任务,ticks参数表示此任务有多少工作量,调用worked方法报告自上次报告以来当前完成的任务数量,在循环中不断通过isCanceled方法判断当前任务是否被用户取消。需要注意,要在finally中调用done方法完成任务,否则会出现进度对话框无法正常关闭的情况。除了ProgressMonitorDialog外,Eclipse中还可以通过其他方式显示进度,在比如IWorkbenchWind
7、ow通过在工作台窗口的状态行中显示进度来实现此界面,WizardDialog在向导状态行中显示长时间运行的操作。除了可以自己构造进度对话框来显示进度之外,我们还可以调用平台的进度服务,而且Eclipse也推荐使用平台的进度服务,这样可以使所有插件都将具有一致的进度表示。平台的进度服务定义为接口IProgressService,我们可以通过PlatformUI.getWorkbench().getProgressService方法来调用系统的进度服务,例如:IProgressServiceprogressService=Platf
8、ormUI.getWorkbench().getProgressService();progressService.busyCursorWhile(newIRunnableWithProgress(){publicvoidrun(IProgressMonitor
此文档下载收益归作者所有