博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swt/Jface进度条
阅读量:6422 次
发布时间:2019-06-23

本文共 2481 字,大约阅读时间需要 8 分钟。

处理长时间的任务的时候常需要进度条显示,有几种实现方式

1,普通的进度条

None.gif
import
 java.lang.reflect.InvocationTargetException;
None.gif
None.gif
import
 org.eclipse.core.runtime.IProgressMonitor;
None.gif
import
 org.eclipse.jface.dialogs.ProgressMonitorDialog;
None.gif
import
 org.eclipse.jface.operation.IRunnableWithProgress;
None.gif
import
 org.eclipse.swt.widgets.Display;
None.gif
import
 org.eclipse.swt.widgets.Shell;
None.gif
None.gif
ExpandedBlockStart.gif
public
 
class
 TestProgress 
{
InBlock.gif    
static boolean stopflg = false;
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * Launch the application
InBlock.gif     * 
@param args
ExpandedSubBlockEnd.gif     
*/
ExpandedSubBlockStart.gif    
public static void main(String[] args) throws Exception{
InBlock.gif        
final Display display = Display.getDefault();
InBlock.gif        
final Shell shell = new Shell();
InBlock.gif        shell.setSize(
500375);
InBlock.gif        shell.setText(
"SWT Application");
InBlock.gif        
InBlock.gif        
//
ExpandedSubBlockStart.gif
        IRunnableWithProgress runnable = new IRunnableWithProgress(){
ExpandedSubBlockStart.gif            
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
InBlock.gif                monitor.beginTask(
"generate"30);
ExpandedSubBlockStart.gif                
for(int i=0;i<100;i++){
ExpandedSubBlockStart.gif                    
if(monitor.isCanceled()){
InBlock.gif                        
return;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    monitor.worked(
1);
InBlock.gif                    Thread.sleep(
50);
ExpandedSubBlockEnd.gif                }
InBlock.gif                
InBlock.gif                monitor.done();
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
;
InBlock.gif        
new ProgressMonitorDialog(shell).run(truetrue, runnable);
InBlock.gif        shell.open();
InBlock.gif        shell.layout();
ExpandedSubBlockStart.gif        
while (!shell.isDisposed()) {
InBlock.gif            
if (!display.readAndDispatch())
InBlock.gif                display.sleep();
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
2,反复循环的进度条

None.gif
import
 java.lang.reflect.InvocationTargetException;
None.gif
None.gif
import
 org.eclipse.core.runtime.IProgressMonitor;
None.gif
import
 org.eclipse.jface.dialogs.ProgressMonitorDialog;
None.gif
import
 org.eclipse.jface.operation.IRunnableWithProgress;
None.gif
import
 org.eclipse.swt.widgets.Display;
None.gif
import
 org.eclipse.swt.widgets.Shell;
None.gif
None.gif
ExpandedBlockStart.gif
public
 
class
 TestProgress 
{
InBlock.gif    
static boolean stopflg = false;
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * Launch the application
InBlock.gif     * 
@param args
ExpandedSubBlockEnd.gif     
*/
ExpandedSubBlockStart.gif    
public static void main(String[] args) throws Exception{
InBlock.gif        
final Display display = Display.getDefault();
InBlock.gif        
final Shell shell = new Shell();
InBlock.gif        shell.setSize(
500375);
InBlock.gif        shell.setText(
"SWT Application");
InBlock.gif        
InBlock.gif        
//
ExpandedSubBlockStart.gif
        IRunnableWithProgress runnable = new IRunnableWithProgress(){
ExpandedSubBlockStart.gif            
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
InBlock.gif                monitor.beginTask(
"generate"30);
InBlock.gif                
int i=0;
ExpandedSubBlockStart.gif                
while(true){
ExpandedSubBlockStart.gif                    
if(stopflg){
InBlock.gif                        
break;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    i
++;
ExpandedSubBlockStart.gif                    
if(i==30){
InBlock.gif                        i
=0;
InBlock.gif                        monitor.beginTask(
"generate"30);
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    monitor.worked(
1);
InBlock.gif                    Thread.sleep(
100);
ExpandedSubBlockEnd.gif                }
InBlock.gif                monitor.done();
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
;
InBlock.gif        
new ProgressMonitorDialog(shell).run(truetrue, runnable);
InBlock.gif        shell.open();
InBlock.gif        shell.layout();
ExpandedSubBlockStart.gif        
while (!shell.isDisposed()) {
InBlock.gif            
if (!display.readAndDispatch())
InBlock.gif                display.sleep();
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
3,rcp中后台任务的进度条

使用Job建立后台任务,只需要设置job.setUser(true)进度条就出现了,和上边一样,进度条需要自己来控制进度。如果做一个cool的进度条,就看你如何让进度条显示出实际的任务进程。

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2007/08/16/858303.html如需转载请自行联系原作者

kenty

你可能感兴趣的文章
春风十里,不如淘宝遇见你——浸润深度学习的淘宝智能搜索
查看>>
WCF开发框架形成之旅---WCF的几种寄宿方式
查看>>
学好数学可以救命
查看>>
java编程之:生成rsa密钥
查看>>
★如何证明自己不是精神病?
查看>>
来自数学君的羊年祝福
查看>>
mongoDB报错Cannot find module &#39;../build/Release/bson&#39;
查看>>
又一款开源手机要来了 —— WiPhone
查看>>
跨越鸿沟——工业大数据的实践与思考
查看>>
DBA和开发同事的一些代沟(五)
查看>>
【OGG】关于在一套复制环境中使用不同版本OGG的问题
查看>>
大咖丨交通运输部科学研究院:交通运输大数据的基础环境正日益成熟-清数•思享会...
查看>>
【中亦安图】导致Oracle性能抖动的参数提醒(4)
查看>>
PHP Header下载文件在IE文件名中文乱码问题
查看>>
读史知今、以史为鉴 【技术商业化】
查看>>
ORACLE EM 12C 监控MySQL
查看>>
最近的几个技术问题总结和答疑(六)
查看>>
阿里云 MVP 第三届评选火热进行中……
查看>>
jsp中forward和redirect的区别(转)
查看>>
非root用户tomcat daemon配置
查看>>