java swing 多个线程,Swing与多线程

1)如果要在图形界面上显示经过数据查询或经过其他方式得来的数据,一般将这个过程放在一个线程中,由该线程进行单独运算,并随时更新图形界面。

(2)Swing线程发生死锁的时候,如果是使用命令行的方式运行的该程序,可以使用CTRL+BREAK的快捷键,会得到线程死锁的位置,堆栈的一些信息。

(3)只有与Swing相同的线程才能对Swing中的组件进行调用,修改等,如ActionListener中的处理就是与Swing保持在同一个线程侯中,不在同一个线程时,需使用SwingUtilities.invokeLater()。但需注意的是invokeLater在工作时都会使Swing主线程的窗口绘制工作停下了,直到invokeLater结束,所以在invokeLater中不要做一些耗时的工作,尽量只做与界面更新相关的工作。 SwingUtilities.isEventDispatchThread():return true if the current thread is an awt event dispatching thread.该方法可以判断当前线程是否awt事件线程,如果不是对于界面的更新操作就应放在invokeLater中。

(4)Swing是一个基于事件队列的单线程模型,GUI上的事件,一个个依次awt event dispatching thread执行,不会发生抢夺资源的情况。这个事件队列就是java.awt.EventQueue. EventQueue is a platform-dependent class that queues event, both from the underlying peer classes and from the trusted application classes. It encapsulates asychronous event dispatch machinary which extracts events from the queue and dispatch them by calling dispatchEvent(AWTEvent) method on this EventQueue with the event to be dispatched  as an argument. The requriements for the events are:Sequentially, that is, it s not permited that serveral events are dispatched simoultanously and the order to be dispatched should be as they are enqueued. And the awt event dispatching thread is fired by the envent dispatch machinary. InvokeLater(Runnable doRun) method causes the doRun.run() to be executed asynchronously on AWT Event dispatch thread, and this will happen after all pending AWT events have been processed. This method should be used when an application thread needs to update the GUI.InvokeAndWait(Runnable doRun) method causes the doRun.run() to be executed sychronously on the AWT event dispatch thread, and this call block uitil all pending AWT events have been processed and then doRun.run() returns.

(5)比如要在一个按钮上又一个操作耗费时间较多,应将此业务代码放在一个线程中执行,执行完毕后再在Dispatch Thread执行Swing组件更新代码。下文中使用SwingWorker在1.6中已经存在,1.5的可以到https://swingworker.dev.java.net/下载。注意这里不能使用invokeLater,应创建一个线程类或使用SwingWorker

publicActionListener getSaveAsActionListener() {

if(this.saveAsActionListener ==null) {

this.saveAsActionListener =newActionListener() {

/**

*响应点击另存为按钮的事件的方法

*/

publicvoid actionPerformed(ActionEvent e) {

finalSwingWorker worker =newSwingWorker() {

@Override

publicObject construct() {

try{

getJEditorPane1().fireControllerChangeListener();

returnDiagramDesignerJFrame.serviceFinished;

} catch(DocumentException e1) {

e1.printStackTrace();

JOptionPane.showMessageDialog(

DiagramDesignerJFrame.this,"您的输入不符合xml格式要求!"

+ e1.getMessage());

} catch(Exception e1) {

e1.printStackTrace();

}

returnnull;

}

/**

*执行完构造器后,在GUI上异步执行它。

*/

publicvoid finished() {

saveAction();

}

};

worker.start();

}

};

}

returnsaveAsActionListener;

}

(6)在进行Swing开发时遇到一个异常: Exception in thread "Thread-5" java.lang.ClassCastException: sun.java2d.NullSurfaceData cannot be cast to    sun.java2d.d3d.D3DSurfaceData

at sun.java2d.d3d.D3DRenderer.copyArea(Unknown Source)

at sun.java2d.d3d.D3DSurfaceData.copyArea(Unknown Source)

at sun.java2d.SunGraphics2D.doCopyArea(Unknown Source)

at sun.java2d.SunGraphics2D.copyArea(Unknown Source)

at javax.swing.BufferStrategyPaintManager.copyArea(Unknown Source) 到网络上搜索也没有找到确切答案,但是根据以上原则,发现自己确实违反了一点,在一个线程中直接调用table的更新操作,之后将该table的更新操作放到invokeLater中,后来就没有了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日本面向未来的特定科技领域技术预见分析

作者:王达,中国科协创新战略研究院本文转载自微信公众号科学家,原载于《今日科苑》2020年第5期目前,全球面临的环境、人口变化、资源、粮食和能源安全等问题亟待解决,先进的测量技术与信息处理技术的深度融合可以刺激更…

Prototype模式

原型模式创建对象不调用原对象的构造函数,是直接copy原对象的浅克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. …

oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)

授权方式2-简化模式(implicit grant type)简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是…

人与人工的智能区别

来源:人机与认知实验室是非之心,智也! 为什么说这不仅仅是指伦理道德,其实,这涉及到人之智能、智慧的根本:非逻辑推理性的判断! 机器的判断是逻辑推理性的,对环境的适应性自然就弱了一些。作家菲茨杰拉德的…

Swift UISearchController

1.遵守协议 UISearchController 2.变量声明 var sc :UISearchController! 3.viewDidLoad中实现 sc UISearchController(searchResultsController: nil) sc.searchResultsUpdater self sc.dimsBackgroundDuringPresentation false//是否添加半透明覆盖层 self.tableView.tab…

matlab的三维伪彩图,matlab画等高线伪彩图

exp(-x.*x-y.*y); con tour3(z,20); title(三维等值线图); xlabel( X ),ylabel( Y ),zlabel( Z); grid; 4) 打印函数的伪彩色图......MATLAB总结 - 三维图形、等高线_数学_自然科学_专业资料。个人总结的一些...(系) 物电学院 专业班级 电子信息科学与技术 1103 指导教师 蒋媛 …

nginx基本配置与参数说明

#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1;#全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;#工作模式及连接数上限 events {…

AI大觉醒:图灵奖得主Bengio称AI将产生意识,未来机器学习核心是注意力机制

来源:人工智能AI技术人工智能会产生意识吗?这是一直以来美剧《西部世界》中探讨的问题。AI主人公觉醒,意识到这个世界是人类杀伐主宰的乐园,于是开启了逆袭之路。2020年ICLR上,图灵奖得主、蒙特利尔学习算法研究所主任…

php 文件指定位置添加内容,C++_VC++在TXT文件指定位置追加内容的方法,本文实例讲述了VC++操作文本文 - phpStudy...

VC在TXT文件指定位置追加内容的方法本文实例讲述了VC操作文本文件的方法,实现在txt文件指定位置插入内容。对于VC爱好者有一定的学习参考价值。主要功能代码如下:void CGoToFileDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this);SendMessage(WM_ICONER…

人类应鼎力进行探索的35种颠覆性技术

本文转载自“战略前沿技术”,原标题《人类应鼎力进行探索的35种颠覆性技术》人类文明的进步,只要出现难以逾越的障碍,必然给人类的发展带来迷茫和灾难。而解决的路径只有一个:科技探索和创新。只有鼎力进行中的科技探索&#xff0…

【codevs2488】绿豆蛙的归宿

这个题开始正向拓扑排序,然后各种wa,心灰意冷,找了个题解,和同学研究了半天,甚至曾经一度认为题解是错的。 这个题正向反向应该都无所谓,但是我实在是蒻,打了半天正向都没打过去,最后…

php读取某类型文件代码,php代码实现读取文件头判断文件类型

php代码实现读取文件头判断文件类型,支持图片、rar、exe等后缀。案例://为图片的路径可以用d:/upload/11.jpg等绝对路径$file fopen($filename, "rb");$bin fread($file, 2); //只读2字节fclose($file);$strInfo unpack("C2chars"…

半导体光刻机行业深度报告:复盘ASML,探寻本土光刻产业投资机会

报告来源:西南证券1、 提要:光刻工艺是晶圆制造最核心环节,光刻产业链协同发展成为光刻机突破关键因子1.1 光刻定义晶体管尺寸,光刻工艺合计占芯片成本近 30% 2019 年全球半导体市场规模达 4090 亿美元,成为数码产业的…

C语言的参数传递原理解析(值传递)

本讲我们和大家一起来聊一聊C语言中有关参数传递的一些知识。 1.问题引入 请写出以下程序的打印结果。 #include // 将某整数加10 void add_by_10(int a){ a a 10; } int main(int argc, char *argv[]){ int a 2; add_by_10(a); printf("a %d\n", a); 上面的程序非…

字符串php手册,php知识点复习之字符串

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 /*echo mark qqqqqq\nqqqqqqbrqqqqqqqqqqqqq\rqqqqqqqqqqqqqqqqqq mark*/ //技术标志要另起一行,并且是顶格写! //作用跟""类似//最致命的一点是:mark后面…

一个诡异的循环:意识何以意识到意识自身?

© Lia Koltyrina / Shutterstock本文经公众号利维坦(ID:liweitan2014)授权转载存在的感觉可能只是一种感觉。——本凯利夫(Ben L. Callif)与其他事物相同,我似乎身处宇宙漩涡的中心,整个宇…

洛谷 P2251 质量检测

题目背景 无 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的分值Q[m] min{A1, A2, ... Am},以及第2至第M 1件的Q[m 1], Q[m 2] ... 最后统计第N - M …

美军重视扩展现实技术的研究和应用

来源: 知远战略与防务研究所 编译:王绍祺美国陆军退役中将苏珊劳伦斯曾担任陆军G-6首席信息官、网络企业技术司令部司令,现为埃森哲联邦服务公司武装部队部门总经理。苏珊劳伦斯在美国《信号》杂志2019年10月号发表文章,指出扩展…

【Codeforces Round #442 (Div. 2) A】Alex and broken contest

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 注意是所有的名字里面,只出现了其中某一个名字一次。 【代码】 #include <bits/stdc.h> using namespace std;const string temp[] {"Danil","Olya","Slava","Ann&q…

oracle 从pflie启动,oracle初始化参数文件管理

oracle实例是指运行状态下的oracle软件&#xff0c;是由内存结构跟一些进程结构组成的&#xff0c;主要实现数据库的访问跟控制功能&#xff0c;是oracle的核心。初始化参数文件是oracle实例运行所需要的参数配置文件&#xff0c;oracle实例启动是必须先从参数文件中读取数据。…