java edt,java并发之EDT测试
测试代码如下:
1、耗时计算没有单独起线程处理,耗时计算在EDT线程执行,导致界面没有响应,处于卡死状态
package thread;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
JFrame frame=new JFrame();
final JButton button=new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
button.setLabel("busy");
button.setEnabled(false);
//ExecutorService executorService=Executors.newCachedThreadPool();
//executorService.execute(new Runnable() {
//
//public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10000000; i++) {
System.out.println("operation is running");
}
//button.setLabel("");
//}
//});
}
});
button.setSize(50, 20);
frame.add(button);
frame.setVisible(true);
frame.pack();
}
}
2、
2、起线程处理耗时操作,耗时操作单独在一个线程处理,界面及时响应,没有问题
3、窗体设置部分代码在主线程处理
4、建议代码如下,对界面的操作应该放在edt线程里去处理,即使是组件的初始化也最好放在EDT中处理,虽然从主线成直接初始化组件发生的错误概率很小,但还是要避免。
上述的SwingUtilites.invokeLater也可有EventQueue.invokeLater代替,这两个方法都是正确的,选择任何一个都可以。实际上,SwingUtilities版只是一个薄薄的封装方法,它直接调用 EventQueue.invokeLater。因为Swing框架本身经常调用SwingUtilities,使用SwingUtilities可以减 少程序引入的类。
第一条规则同通常称为单一线程规则,在任何非EDT线程中都不该接触swing组件。这两条规则看似是矛盾的,既然将耗时的操作放入其他其他线程,那么当耗时操作完成时如何将结果更新到swing组件当中去?因为不能在其他线程中接触swing组件的。其实想想也不难,既然EDT本质上是从事件队列中拿出事件来处理的,那么只要能在其他线程中把耗时操作完成以后再把更细ui组件的代码封装放到事件队列中就行了,到时EDT自然会从事件队列取出代码执行用以达到更新的目的,这样两条规则都满足了。其实在任何线程中,可以使用两种方法想事件队列添加任意的动作。即调用SwingUtilites类(或者EventQueue类也是一样)invokeLater或者invokeAndWait两个静态方法向事件队列添加任务。
package thread;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
JFrame frame=new JFrame();
final JButton button=new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
button.setLabel("busy");
button.setEnabled(false);
ExecutorService executorService=Executors.newCachedThreadPool();
executorService.execute(new Runnable() {
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10000000; i++) {
System.out.println("operation is running");
}
//对gui组建的操作放在edt线程处理
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// TODO Auto-generated method stub
button.setLabel("");
}
});
}
});
}
});
//界面的初始化其实也不应该放在主线程执行,应该放在edt线程,虽然出错的概率不大
button.setSize(50, 20);
frame.add(button);
frame.setVisible(true);
frame.pack();
}
}
java edt,java并发之EDT测试相关推荐
- java 时区 edt_JAVA TimeZone发行EDT对EST
我是java的新手,因此很长一段时间以来都无法解决这个问题. 我使用的是Windows XP,机器设置为TimeZone:Eastern Time(美国和加拿大). 我有一个Java应用程序,它获取当 ...
- java edt,Java Swing 学问篇 - EDT
Java Swing 常识篇之EDT 从毕业到现在用SWING已经一年多,在这里想总结一下过去学到的东西和经验,和各位兄弟姐妹们一起分享.在以后的文章中也会和大家一起来分享一些好的框架.说起JAVA ...
- Java游戏服务器开发之A星算法
Java游戏服务器开发之A星算法 学习这个主要是用于寻路算法. 参考资料主要是siki学院的视频,A计划--人工智能--A星算法. 网址http://www.sikiedu.com/cou ...
- Java 控制台程序的基本结构测试分析草稿
Java 控制台程序的基本结构测试分析 19 xon 继续
- JNI开发笔记(八)--Java读取txt文件进行JNI测试
Java读取txt文件进行JNI测试 引 前言 1. 新建assets文件夹 2. 载入测试文件 3. 建立文件读取方法 4. 在MainActivity中读取文件数据 引 JNI开发笔记(一)–An ...
- java设计一个程序后怎么测试_Java语言程序设计(第1阶段学习测试)(都平)
第 1 页 共 5 页 山东省过程性考试课程 Java 语言程序设计(第2阶段)测试 一. 简答题 (本大题共15个小题,每小题4分,共60分) 1. 什么是类?任何定义一个类?类中包含哪几部分,分别 ...
- Java微信支付API文档测试
Java微信支付API文档测试(注意用的微信开发文档是什么支付) 本人用的刷卡支付( 之前看错了,一直在看扫码支付,心塞 ),如图 首先,做一系列准备,获取appid等等,可以写在一个配置文件里面,如 ...
- c语言blackjack设计思路,写一个“BlackJack ”Java应用程序 该计划将测试你的逻辑思维。...
写一个"BlackJack "Java应用程序 该计划将测试你的逻辑思维. 答案:1 信息版本:手机版 解决时间 2019-10-05 09:51 已解决 2019-10-05 ...
- Java学习路线(22)——测试框架Junit
一.单元测试概念 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法正确性. 二.Junit测试框架 (一)概念: J ...
- 基于Java毕业设计宠物论坛设计网站测试视频2021源码+系统+mysql+lw文档+部署软件
基于Java毕业设计宠物论坛设计网站测试视频2021源码+系统+mysql+lw文档+部署软件 基于Java毕业设计宠物论坛设计网站测试视频2021源码+系统+mysql+lw文档+部署软件 本源码技 ...
最新文章
- 图像相似度测量与模板匹配总结
- Go if _,ok:=range map; ok判断key是否在map中
- linux安卓环境更新失败,Android SDK Manager国内无法更新的解决方案
- superset可视化-country map
- 西安邮电大学卓越班c语言面试题,西安邮电大学C语言实验报告.docx
- iText中给pdf内容添加水印
- UIAlertController中TextField的用法
- Android倒计时工具
- Excel常用快捷键与打印
- 吉他php怎么弹,吉他弹奏技巧(一看就会)
- 【积累小技巧】word格式刷没作用
- 计算机安装xp蓝屏怎么办,win7系统下装xp出现0x0000007B蓝屏解决方法|win7改装xp系统怎么设置BIOS...
- 8、16、32-BIT系列单片机区别与特点
- OPCClient远程连接OPC服务器配置手册
- 【QT】The inferior stopped because it received a signal from the operating system及opencv_gapi模块cmake错误
- 房价下跌的“理由”越来越多
- ,片片鳞甲都烁烁生辉
- 金融学经济学字母含义
- 4.1 使用旋转和镜像工具制作图标 [Illustrator CC教程]
- 无线充电宝当无线充电器哪个品牌好?快充无线充电宝推荐