在我们用JAVA做客户端的时候,可能会遇上这么一个需求:停止当前正在执行的一个操作。

这个操作或者操作时间过长而让客户不想等待它,从而要停止它的执行。那这个操作怎么做呢?

我们都知道,我们在使用事件触发来执行一个业务方法,一般需要使用一个新的线程,否者当前的UI线程会卡死,以Swing为例,JButton被点击后触发事件的代码:

                btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new Thread(new Runnable() {@Overridepublic void run() {//执行业务方法System.out.println("执行。这个方法要执行很久!!");}}).start();}});

那么我们要取消执行这个方法,最好最直接的做法就是停掉它。

所以我们要想一个办法来管理这些线程,在这里我没有使用线程池来管理,而是适用一个List来管理。

    private static LinkedList<Thread> threadList = new LinkedList<Thread>();public static LinkedList<Thread> getThreadList() {return threadList;}

为什么要用LinkedList?因为它可以快速的找到头尾元素,从而提高性能。这里List我用它来装着每一个由UI启动的执行业务方法的线程。

            loginBtn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("登陆。。这个方法要执行5秒");}});thread.start();    //开始执行threadList.add(thread);    //把线程放到List里
                }});

既然把线程放在了List里,那要停止它很简单,把它找到,然后调用stop()方法:

private void stopBtnActionPerformed(ActionEvent e) {Thread thread = null;try{thread = threadList.getLast();thread.stop();System.out.println("操作被已手动停止");}catch(NoSuchElementException ex){System.out.println("没有正在执行的操作!");}catch(Exception exx){exx.printStackTrace();}finally{threadList.remove(thread);      //从List移除这条线程。}}

为了防止stop()方法调用时报错,我们需要写一个扫描器来扫描哪些线程run()方法是已经执行完毕而不能调用stop()方法,run()方法执行完毕的线程就把它从List移除

import java.lang.Thread.State;
import java.util.LinkedList;import com.alee.utils.ThreadUtils;/*** 保存每个执行操作的线程,并且定期清理已经结束的线程。* 主要用于“取消上次操作”功能。* @author g**/
public class ThreadListScaner implements Runnable{private LinkedList<Thread> threadList;public ThreadListScaner(){this.threadList = UIContext.getThreadList();}@Overridepublic void run() {//2秒扫描一次while(true){ThreadUtils.sleepSafely(2000);LinkedList<Thread> tempThreadList = new LinkedList<Thread>(threadList);for(Thread thread : tempThreadList){State state = thread.getState();if(state.equals(State.TERMINATED)){        //如果是TERMINATED状态,则移除这条线程
                    threadList.remove(thread);}}}}
}

这里我把装线程的List缓存到一个叫UIContext的类里,其实就是一个装在各种全局可能需要用到的东西的类。

这个代码实现了一个功能:停止上一操作,每按一次停止按钮,就停止一条线程。

.

转载于:https://www.cnblogs.com/cha1r/p/3476175.html

Java 客户端界面功能:停止当前操作相关推荐

  1. java版mosquitto客户端使用SSL功能的具体操作总结

    在开发java版mosquitto客户端程序时需要使用paho库,如果开发的java客户端要用ssl功能,则需要Bouncy Castle库:在使用ssl功能时,需要证书文件进行进行身份认证,但在测试 ...

  2. Redis介绍 Java客户端操作Redis

    Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...

  3. Redis介绍 Java客户端操作Redis

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...

  4. java客户端操作elasticsearch7.3.2版本

    前面一篇介绍了使用kibana操作elasticsearch,使用的版本都是最新版7.3.2,现在我们开始使用java客户端来操作elasticsearch. 一.索引管理 1.1 搭建工程 1.1. ...

  5. java day47【redis概念 、下载安装 、 命令操作 、持久化操作 、使用Java客户端操作redis】...

    第一章  Redis 1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即"不仅仅是S ...

  6. Unity3D界面功能操作讲解

    转载自 脱莫柔Unity3D学习之旅 本文链接地址: Unity3D 界面功能操作讲解 Hierarchy 层次视图: 显示当前打开场景文件(Scene)在场景视图(Scene View)中的显示或隐 ...

  7. FTP 的Java客户端操作

    注:文章皆为个人纪录,可用性请以最终结果为准,若有错还请大佬们指出,谢谢! 温馨提示:(默认权限下,暂不支持往本地的C盘中写入文件) 一.引入依赖 <!-- https://mvnreposit ...

  8. 【Redis】Java客户端操作reids数据库

    目录 一.Java客户端分类 1.Jedis 2.lettuce 3.Redisson 二.Jedis 三.reids连接池 一.Java客户端分类 Redis提供了多个版本的Java客户端,其中推荐 ...

  9. 客户端界面实现及登录功能实现

    文章目录 1 客户端界面实现及登录功能实现 1.1 界面设计 1.2 界面实现及实现登录对话框的功能 1 客户端界面实现及登录功能实现 1.1 界面设计 界面设计: 界面实现方案: 使用不同Layou ...

最新文章

  1. 计算机书籍-Go语言入门经典SAMS Teach Yourself
  2. 十年Java编程开发生涯,java计算时间差毫秒
  3. 电脑仙人掌机器人作文_神奇的仙人掌作文400字
  4. 淘宝端智能演进和思考
  5. 2. 移动安全渗透测试-(Android安全基础)
  6. Python学习笔记:集合(set)
  7. 马克·扎克伯格分享Facebook水冷数据中心照片
  8. 《ARM体系结构与编程》中的严重错误
  9. 如何设置变更Word页面颜色?干货经验!怎样操作更改word背景颜色?
  10. oracle报1653解决办法,“IMP-00058: 遇到 ORACLE 错误 1653”,如何解决?
  11. php 503解决办法,php设置页面返回503状态-php设置503http状态的方法-吾爱编程网
  12. 思考项目 求1+2的2次方+3的3次方+4的4次方+5的5次方+6的6次方的值。(异种循环嵌套)
  13. excel打开后灰色不显示内容?
  14. 北欧计算机专业出国,留学北欧,哪个国家计算机专业比较好?
  15. MySQL数据库性能优化史诗级大总结
  16. 百度工程师眼中的云原生可观测性追踪技术
  17. Black Hat Python3 Chapter4
  18. 2022国赛D题气象报文信息卫星通信传输参考代码及思路
  19. 汉白玉产地在哪里_汉白玉的产地 汉白玉是产自哪里的
  20. C4d lite r 16语言包,[其他软件] C4D S22 三维软件Maxon Cinema 4D S22.016 C4D R22 含中文语言包 破译版(Win)...

热门文章

  1. 做了5年Java,java读写锁使用
  2. 【深度学习】Swin-Transformer和EfficientNet对比分析
  3. 【洛谷搜索专题Python和C++解】DFS和BFS经典题目(陆续补充)
  4. 算法提高 学霸的迷宫
  5. dell服务器 稳定性,设计优秀管理方便 戴尔R710服务器评测
  6. mysql5.7.17配置_mysql5.7.17安装配置
  7. c# poi写入e_C# 使用 NPOI 库读写 Excel 文件(转载)
  8. at指令 fpga_FPGA毕设系列 | 无线通信
  9. python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
  10. 网站SEO优化该如何选择适合的关键词优化?