最近写了两个GUI小程序,都是和写文件有关的。但是都发现,每次程序运行起来,关闭按钮就不起作用。上了“爆栈”网站和CSDN发了帖,爆栈给出的原因如下,有需要翻译的请留言。

The EDT(Event Dispatch Thread) is responsible for (amongst other things) processing all the UI events that occur, including the request to close your window. But if you block this thread with time consuming tasks (like I/O, loops, Thread#sleep or any other blocking operation), then the EDT is unable to process any of the events accumulating in the queue.In this case, you best bet would be to use a SwingWorker to off load the writing of the file to another thread. Check out Concurrency in Swing for more information

具体是因为我的写文件操作是在一个button的listener里面触发的,导致读文件操作没完成的时候,线程阻塞了。可以看到按钮是不会反弹回来的。所以再点关闭按钮也就没返回了。

具体解决方法就是要写一个类,继承SwingWorker 类,重写doInBackground()方法,把耗时的写文件操作写在这个方法里面。然后在button的listener里面创建SwingWorker实例,并调用它的execute()方法,即会调用到我们重写的doInBackground()方法。

private class Task extends SwingWorker<Void, Void>{@Overrideprotected Void doInBackground() throws Exception {//耗时的操作            return null;
        }}

主方法写法如下

SwingUtilities.invokeLater(new Runnable() {public void run() {try {View window = new View();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});

把耗时的操作写在doInBackground()之后,程序运行起来就可以点击关闭按钮了,线程不再阻塞。

转载于:https://www.cnblogs.com/baron89/archive/2012/12/12/2814294.html

JAVA GUI关闭按钮不起作用(用SwingWorker解决)相关推荐

  1. java 中gui的作用_java学习中最应该注意的Java GUI用户界面以何为基础

    java中的GUI编程(Graphic User Interface,图形用户接口),是在它的笼统窗(Abstract Window Toolkit,AWT)上完成的,java.awt是AWT的东西类 ...

  2. java gui介绍_IntelliJ IDE 开发Java GUI 入门

    原标题:IntelliJ IDE 开发Java GUI 入门 j主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java S ...

  3. idea前端可视化_IntelliJ IDE 开发Java GUI 入门

    本博客主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java Swing的布局.控件等相关知识.本博客所进行的讲解及工程的 ...

  4. Java GUI 知识总结

    一.Java GUI知识总结: 二.swing 和 AWT 的区别 1.AWT(Abstract Window Toolkit 抽象窗口工具包),用于本地绘制基本的窗口 Swing :是在 AWT 的 ...

  5. 一种有效组织Java GUI 源码的编程架构

    目录 目录 1. 引言 2. 几种不好的GUI编程架构的表现形式 2.1 三种类都放到一个篮子里 2.2 监听器类.界面类放到一个篮子里 2.3 模型类与界面组件存在耦合 2.4 设计的监听器类粒度太 ...

  6. Java GUI 容器与布局:

    GUI 图型界面的实现. 使用的主要包:import javax.swing.*  与  import java.awt.* 容器:是用来容纳其他组件的特殊组件. 1  顶层容器:JFrame  JA ...

  7. Java GUI编程之AWT和Swing

    目的:为了了解MVC架构,了解监听,我们有必要学习Java GUI 编程. 一. AWT:抽象窗口工具箱. 1.弹出窗口实例: package GUI;import java.awt.*;public ...

  8. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用 转载于:https://www.cnblogs.com/leiblog/p/10529056.html

  9. idea修改java和jsp不起作用_使用IDEA编写jsp时EL表达式不起作用的问题及解决方法...

    在使用IDEA开发maven+springMVC项目时遇到不加载EL表达式的问题,怎么处理呢?下面小编给大家带来了实现代码,一起看看吧 加载如下JSP代码: Title ${lists.usernam ...

最新文章

  1. 知乎高赞:我的编程能力从什么时候开始突飞猛进的?
  2. java脚本_写一个在线Java脚本执行器
  3. android项目中导入opencv库,将第二个JNI库包含到我的Android项目(OpenCV)后...
  4. (转)关于Linux核心转储文件 core dump
  5. 一个vue管理系统的初步搭建总结
  6. ArrayList遍历的同时删除
  7. RabbitMQ负载均衡(4)——LVS
  8. C++题解-Leecode 375. 猜数字大小 II——Leecode每日一题系列
  9. Adobe form batch output print mode - multiple
  10. SCOM Rule 介绍 [SCOM中文系列之六]
  11. Redisson 布隆过滤器
  12. 矢量算法java,矢量线的一种栅格化算法
  13. PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖
  14. MAC苹果应用软件,财务管理,三D制图,清理神器
  15. Python3.4中文手册chm,3.7中文手册HTML
  16. 自动化车辆的开发、测试和验证场景
  17. Pega How To系列之一:如何在页面上动态显示/隐藏内容 ----by Cheney Wang
  18. 深入理解 Laravel Eloquent(一)——基本概念及用法
  19. matlab绘制银河系,科学家们是如何绘制宇宙星系图的?
  20. Unity-odin-npbehave结合烟雨大佬的示例

热门文章

  1. mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优
  2. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解
  3. spark和python的关系_spark submit和pyspark有什么区别?
  4. 怎么查硬盘序列号_担心硬盘体质?不妨先给硬盘做一次体检
  5. C++对象模型2——编译器生成构造函数的几种情况
  6. css 识别变量中的换行符_跟我一起全面了解一下CSS变量
  7. echarts前后端交互数据_如何避免前后端在数据交互方面的相爱相杀?
  8. 【问题】vs IIS破除文件上传限制最全版
  9. 如何搭建亿级社交信息分享社交平台架构
  10. ScheduledThreadPoolExecutor详解