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中,后来就没有了

java swing 多个线程,Swing与多线程相关推荐

  1. java中什么是线程安全_Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  2. 转:Swing中的线程探究

    http://superzhouych.iteye.com/blog/564907 ---------------------------------------------------------- ...

  3. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

  4. 好程序员Java教程解读什么是swing

    好程序员 Java教程解读什么是 swing , swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便.现在的jav ...

  5. java swing 示例_JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  6. java魔兽猎人_Java基于Swing实现的打猎射击游戏代码

    package Game; import static java.lang.Math.random; import java.awt.*; import java.awt.event.*; impor ...

  7. java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  8. java实现弹球游戏_Java swing版弹球游戏源代码下载

    package 弹球; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionL ...

  9. Swing 的任务线程与 EDT 事件分发队列模型

    1 现象及问题 在Swing程序中,经常能看到如下这种代码: 为何用invokeLater,而不直接调用呢? 大多数Swing的API非线程安全,不能在任意地方调用,应该只在EDT中调用. Swing ...

最新文章

  1. scrapy mysql 报错_scrapy爬数据存mysql报错
  2. android天女散花效果_Android有趣的爆炸散落动画view:开源ExplosionField
  3. .NET开发作业调度(job scheduling) - Quartz.NET
  4. 防热服的设计数学建模_全国大学生数学建模和电子设计赛,这所驻青高校获奖山东最多...
  5. elk系列1之入门安装与基本操作
  6. lua qt 编译_Win32下 Qt与Lua交互使用(一):配置Qt下Lua运行环境
  7. 福特新CEO“泼冷水”,给自动驾驶设立商业化节点是否真的有必要?
  8. 个人作业7 第一阶段SCRUM冲刺(九)
  9. 计算机维修报价,求一张电脑维护维修价格表
  10. HTML5离线缓存(Application Cache)
  11. Debian, Ubuntu 和 Linux Mint 中安装WPS
  12. 大数据分析-实验八 鸢尾花数据集分类
  13. 常见大学机房的计算机设备,长江大学公共机房管理办法
  14. numpy弧度制和角度制转换deg2rad, rad2deg
  15. C#控制方块的移动windows
  16. 【调剂】2022年燕山大学电气工程学院 程淑红教授“计算机视觉与人工智能”团队调剂招生信息...
  17. Python-数据处理
  18. 收敛域、收敛区间与收敛半径
  19. 教师招聘计算机面试技能测试,教师招聘面试中技能测试指什么
  20. js中无区别分割中英文逗号的字符串成为数组

热门文章

  1. Django搜索工具——全文检索
  2. sklearn数据集与估计器
  3. 计算机设备报废流程图,报废流程图.ppt
  4. 刷机后如何升级android,手机系统怎么升级 三大方法大全【图文】
  5. mysql注入技巧原理_MySQL注入技巧总结
  6. mysql_根据身份证号识别性别、年龄、所在省份
  7. 我拿模型当朋友,模型却想泄漏我的隐私?
  8. 21届校招薪资曝光:严重倒挂老员工!
  9. 2019 年,智能问答(Question Answering)的主要研究方向有哪些?
  10. Hive SQL的编译过程