📄 task.java
字号:
package cn.com.chengang.swt.thread;
import org.eclipse.swt.widgets.Display;
public class Task {
private TaskGUI taskGUI; // 得到前台界面的对象引用
private boolean stopFlag; // 停止后台处理的标志
public Task(TaskGUI taskGUI) {// 通过构造函数传入前台界面类的对象引用
this.taskGUI = taskGUI;
}
public void stop() {// 停止后台处理
stopFlag = true;
}
public void start(int taskCount) {// 开始后台处理
stopFlag = false; // 修改停止标志
log("后台线程开始执行任务......\n");
for (int i = 0; i < taskCount; i++) {
if (stopFlag)// 一旦发现标志被设为停止,则退出循环
break;
// 每隔0.1秒一次循环,用于模拟一个需时较长的任务
try {
Thread.sleep(100);
} catch (InterruptedException e) {
log(e.getMessage());
}
log("任务" + (i + 1) + "处理完毕\n");
notifyOneTaskFinish(i);// 通知完成了一个任务
}
log("后台线程结束执行任务!!!!!!\n");
notifyAllTasksFinish();// 通知已完成了所有任务
}
private void log(final String str) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
// 向前台界面的consoleText输出字符串
taskGUI.consolePrintln(str);
}
});
}
private void notifyOneTaskFinish(final int progress) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
// 移动前台界面的进度条
taskGUI.moveProgress(progress);
}
});
}
private void notifyAllTasksFinish() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
// 修改界面按钮状态,让执行按钮有效,停止按钮无效
taskGUI.setButtonState(true);
}
});
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -