`

用滚动的字符表示Task的运行,比较ProgressMonitorDialog

阅读更多

JFace中的提供的ProgressMonitorDialog对话框,来表示正在运行的Task,还是比较方便,可设置一共的Task有多少步,现在完成了多少,还有多少没有完成的。

来个例子吧:

public class TT {
	static ProgressMonitorDialog dialog;
	public static void main(String[] args) {
		IRunnableWithProgress runnable = new IRunnableWithProgress() {
			public void run(IProgressMonitor monitor) {
//				monitor.beginTask("begin" + "...... ",10);
				monitor.beginTask("begin" + "...... ",IProgressMonitor.UNKNOWN);
				monitor.setTaskName("Running cmd XXXX.");
				int i = 0;
				while(i++ < 10) {
					if(monitor.isCanceled()) {
						monitor.setTaskName("Canceled cmd XXXX.");
						break;
					}
					try {
						Thread.sleep(1000);
						monitor.setTaskName("Running cmd XXXX.");
						monitor.subTask("Running step " +i + " .");
						monitor.worked(1);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				monitor.done();
			}
		};
		try {
			dialog = new ProgressMonitorDialog(null);
			dialog.run(true, true, runnable);
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
}

 



 

 

使用IProgressMonitor.UNKNOWN参数,是不知道Task有多少步,Dialog是程序级的对话框,也就模式对话框了。

 

有的时候想搞一些特别的东东来表示程序中有Task正在运行,这里采用滚动的标记字符来表示Task的运行:

例子:

 

public class Tsdf {
	public static  Timer t;
	static Display display = Display.getDefault();
	
	public static void main(String[] args) {
		Shell shell = new Shell();
		shell.setBounds(10,10,150,150);
		shell.setLayout(new RowLayout(SWT.VERTICAL));

		final Label l = new Label(shell, SWT.NONE);
		l.setText("Running");
		final String s = "<<<" + l.getText();
		final int[] index = new int[]{0};
		
		Button brun = new Button(shell, SWT.NONE);
		brun.setText("run");

		Button bstop = new Button(shell, SWT.NONE);
		bstop.setText("stop");

		brun.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if(t != null) {
					return;
				}
				t = new Timer(true);
				t.scheduleAtFixedRate(new TimerTask() {
					public void run() {
						System.out.println("running time " + System.currentTimeMillis());
						display.asyncExec(new Runnable() {
							public void run() {
								index[0] = (index[0]<3)?index[0]+1:0;
								if(!l.isDisposed()) {
									l.setText(s.substring(index[0], s.length()-3+index[0]));
								}
							}
						});
					}
				}, 0, 300);
			}
		});
		

		bstop.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if( t == null)
					return;
				t.cancel();
				t = null;
				l.setText("stop");
				System.out.println("Stop time " + System.currentTimeMillis());
			}
		});

		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) display.sleep();
		}
		display.dispose();
	}
}

 

 

结果:



 

运行的效果,label中“<<<Runn”,“<<Runni”,“<Runnin”,“Running”交替出现,给人一种动态的效果。

  • 大小: 11.6 KB
  • 大小: 4.8 KB
分享到:
评论
2 楼 xmind 2011-09-22  
是代码一还是代码二?
有没有import对?
引用
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
1 楼 lizhensan 2011-09-10  
为什么我的进度条不懂呢?拷贝你的代码

相关推荐

    SWT并发例子(后台耗时线程)

    在SWT中,我们可以使用`Display.asyncExec`或`Display.syncExec`方法来在事件调度线程中执行代码,而使用`new Thread()`来创建并启动新的后台线程来执行耗时任务。以下是一个基本的示例: ```java Button button = ...

    Eclipse_Swt_Jface_核心应用_部分19

    9.9.9 用键盘控制表格(TableCursor) 189 9.9.10 带有进度条的表格 191 9.9.11 表格小结 192 9.10 树(Tree) 192 9.10.1 不同样式的树 193 9.10.2 为树添加图标 193 9.10.3 可编辑的树 196 9.10.4 ...

    SWT&JFACE GEF or Eclipse Platform

    - **ProgressMonitorDialog**: 提供进度条对话框,可以跟踪后台任务的执行进度。 ### 应用建议 - 使用SWTDesigner作为可视化设计工具,可以提高开发效率,减少手写代码的工作量。 - 在设计界面之前先草图构思,有...

    eclipse 3.6 rcp 开发

    - 使用ProgressMonitorDialog进行任务执行时的进度显示。 - Job类用于后台任务处理。 #### 13. 使用第三方JAR - **概述**: 在Eclipse RCP项目中使用第三方库。 - **步骤**: - 将JAR添加到项目的构建路径中。 - ...

    SWT/Jface文件下载进度条 组件封装代码

    对SWT/Jface的进度条(ProgressMonitorDialog)进行封装,使下载文件更方便调用. DownloadProgressBar 是单个文件下载类 MultiDownloadProgressBar 是多个文件下载类 Test开头的类是测试类 支持下载完毕后自动关闭流,...

    实现RCP在线升级说明

    ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()); dialog.run(true, false, op); // 显示更新信息 UpdateManagerDialog.open(getShell()); } catch (InvocationTargetException e) { ...

    SWT 编 程 总 结

    - **ProgressMonitorDialog**:显示任务执行进度。 #### 10. SWT的事件(widget事件) SWT提供了一套完善的事件处理机制,用于响应用户的操作。 ##### 10.1 GUI系统的事件机制: SWT使用基于监听器的模型来处理事件...

    SWT/JFACE in Action

    - **高级控件**: 书中还介绍了更多高级控件,如ProgressMonitorDialog、BusyIndicator等,这些控件可以帮助开发者处理复杂的应用场景。 - **自定义布局**: 了解如何使用自定义布局来实现更灵活的UI设计。 #### 6. ...

Global site tag (gtag.js) - Google Analytics