📄 progressmonitordialog2.java
字号:
package cn.com.chengang.jface.dialog;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class ProgressMonitorDialog2 {
public static void main(String[] args) {
new ProgressMonitorDialog2().open();
}
public void open() {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setLayout(new RowLayout());
Button button = new Button(shell, SWT.NONE);
button.setText(" GO ");
button.addSelectionListener(new SelectionAdapter() {
private boolean stopFlag;// 停止标志
private void go() {
for (int i = 0; i < 10; i++) {// 循环10次,每次间隔一秒
System.out.println("第" + (i + 1) + "个任务执行完毕");
if (stopFlag) {// 监控是否要让停止后台任务
System.out.println("被中断了");
return;
}
try {
Thread.sleep(1000);
} catch (Throwable t) {}
}
stopFlag = true;// 执行完毕后把标志位设为停止,好通知给进度框
System.out.println("全部任务执行完毕");
}
public void widgetSelected(SelectionEvent e) {
stopFlag = false;// 每次都设初值为false
new Thread() {// 把后台任务放到一个新开线程里执行
public void run() {
go();
}
}.start();
showProgressDialog();// 打开一个进度框
}
private void showProgressDialog() {
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) {
monitor.beginTask("正在执行中......", 30);
int i = 0;
while (true) {
// 监听是否单击了进度框的“取消”按钮,stopFlag则是监听后台任务是否停止
if (monitor.isCanceled() || stopFlag) {
stopFlag = true; // 单击了“取消”按钮要设标志位为停止,好通知后台任务中断执行
break;// 中断处理
}
// i到30后清零。并将进度条重新来过
if ((++i) == 30) {
i = 0;
monitor.beginTask("正在执行中......", 30);
}
// 进度条每前进一步体息一会,不用太长或太短,时间可任意设。
try {
Thread.sleep(99);
} catch (Throwable t) {}
monitor.worked(1);// 进度条前进一步
}
monitor.done();// 进度条前进到完成
}
};
try {
new ProgressMonitorDialog(shell).run(true, true, runnable);
} catch (Exception e) {
e.printStackTrace();
}
}
});
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -