⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loopprogressdialog.java

📁 SWTJFace篇项目源程序该项目包含 包含了Eclipse下构建swt的基本工程
💻 JAVA
字号:
package cn.com.chengang.jface.dialog.loopprogressdialog;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.widgets.Shell;


public class LoopProgressDialog {
	private ProgressMonitorDialog dialog;
	public BooleanFlag stopFlag = new BooleanFlag();

	public LoopProgressDialog(Shell shell) {
		dialog = new ProgressMonitorDialog(shell);
	}

	public void run(boolean cancelable, final IProgressDialogRunnable runnable) {
		new Thread() {
			public void run() {
				runnable.run(stopFlag);
			}
		}.start();

		try {
			dialog.run(true, cancelable, new LoopRunnable());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private class LoopRunnable implements IRunnableWithProgress {
		public void run(IProgressMonitor monitor) {
			monitor.beginTask("正在执行中......", 30);
			int i = 0;
			while (true) {
				// 监听是否单击了进度框的“取消”按钮,stopFlag则是监听后台任务是否停止
				if (monitor.isCanceled() || stopFlag.getFlag()) {
					stopFlag.setFlag(true);
					break;// 中断处理
				}
				// i到30后清零。并将进度条重新来过
				if ((++i) == 30) {
					i = 0;
					monitor.beginTask("正在执行中......", 30);
				}
				// 进度条每前进一步体息一会,不用太长或太短,时间可任意设。
				try {
					Thread.sleep(99);
				} catch (Throwable t) {}
				monitor.worked(1);// 进度条前进一步
			}
			monitor.done();// 进度条前进到完成
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -