可以使用SwingWorker.cancel()来取消一个背景任务。如果失败(比如已经完成或已经取消),会抛出异常。
//这段程序代码主要为读者展示如何取消背景任务
import java.awt.*;
import java.util.List;
import javax.swing.*;
public class threadtest1
{
static final int WIDTH=600;
static final int HEIGHT=800;
JFrame frame;
JPanel pane;
static JTextField text1;
static worker wor1;
static worker wor2;
public void add(Component c,GridBagConstraints constraints,int x,int y,int w,int h)
{
………………………………..//与上例中相同位置内容相同
}
public threadtest1()
{
………………………………..//与上例中相同位置内容相同
button1.addActionListener
(//将计数工作放入工作线程,然后执行它
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
(wor1 = new worker()).execute();
}
}
);
button2.addActionListener
(//将计数工作放入工作线程,然后执行它
new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
(wor2 = new worker()).execute();
}
}
);
button3.addActionListener
(//当单击此按钮时,后台计数会停止,并且会将目前的数据显示在文本组件中。
new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
wor1.cancel(true);
wor1 = null;
}
}
);
button4.addActionListener
(//当单击此按钮时,后台计数会停止,并且会将目前的数据显示在文本组件中。
new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
wor2.cancel(true);
wor2 = null;
}
}
);
button5.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
wor1.cancel(true);
wor2.cancel(true);
}
}
);
}
private static class counter
{
private final int sum;
counter(int sum)
{
this.sum=sum;
}
}
private class worker extends SwingWorker<Void, counter>
{
protected Void doInBackground()
{
int sum = 0;
while (!isCancelled())
{
sum++;
}
publish(new counter(sum));
return null;
}
protected void process(List<counter> count)
{
counter cou = count.get(count.size() - 1);
text1.setText(String.format("%d", cou.sum));
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
wor1.cancel(true);
wor2.cancel(true);
new threadtest1();
}
});
}
}
分享到:
相关推荐
本件超过了上传限制,请...第16~19章主要讲述有关Swing图形开发的其他知识,包括观感器、Swing线程与并发、模型与架构等。第20章通过一个综合实例使读者能够在实际开发中理解和巩固所学知识,从而提高综合应用能力。
7.1 任务取消111 7.1.1 中断113 7.1.2 中断策略116 7.1.3 响应中断117 7.1.4 示例:计时运行118 7.1.5 通过Future来实现取消120 7.1.6 处理不可中断的阻塞121 7.1.7 采用newTaskFor来封装非标准的取消122 ...
任务取消 停止基于线程的服务 处理非正常的线程终止 JVM关闭 线程池的定制化使用 任务和执行策略之间的隐性耦合 线程池的大小 配置ThreadPoolExecutor(自定义的线程池) 此处需要注意...
模拟多进程的并发执行,java编写,swing实现
j2se 18天笔记是根据网络上资料而制作成的CHM帮助文档 目录: Day01:java环境与数据类型 Day02:数据运算与数组 Day03:面向对象 Day04:修饰符与类权限 ...Day17:新特性与并发线程 Day18:软件开发流程
这是为了确保Swing应用程序在正确的线程中运行,避免出现并发访问问题。 Swing还提供了许多其他的GUI组件和功能,如文本框、标签、列表、菜单、工具栏、进度条、表格等。开发人员可以使用这些组件和功能来构建复杂...
这是一个类似于QQ的即时通讯的程序,基于socket的TCP通信,支持并发多线程,带Swing界面。
4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。 5.精心的GUI设计允许快速操作和更精确的计时。 6.缓存和离线分析/回放测试结果。 JMeter的高可扩展性 1.可链接的取样器允许...
精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 1.图文并茂 通俗易懂 日本资-深技术作家、《程序员的数学》作者结城浩执笔...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...
我们使用了多线程技术来处理并发请求和耗时操作,以保证系统的响应速度和用户体验。我们还使用了持久化技术,如数据库和文件系统,以存储和管理数据。此外,我们还采用了错误处理和日志记录等技术,以提高系统的稳定...