- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Swing程序中的线程-金旭亮.PDF
Swing程序中的线程
北京理工大学计算机学院
金旭亮
为什么“多线程”是必要的?
示例项目:Bounce
当小球正在弹跳时,无法点击此按钮。
多线程改造后的示例程序:让小球在另一线程中运行
class BallRunnable implements Runnable
{
. . .
public void run() {
try {
for (int i = 1; i = STEPS; i++) {
ball.move(component.getBounds());
component.repaint();
示例项目:Bounce2
Thread.sleep(DELAY);
} 当示例程序运行时,现
} 在可以随时退出程序。
catch (InterruptedException exception) {
}
} Ball b = new Ball();
. . . panel.add(b);
} Runnable r = new BallRunnable(b, panel);
Thread t = new Thread(r);
t.start();
Swing应用程序中的多线程开发
• Swing应用程序内部有一个“事件分派线程(event dispatch
thread )”,它管理一个“事件队列(event queue)”,负责实现
对用户鼠标键盘等操作的响应。
• Swing组件不是线程安全的,任何访问Swing组件的代码,应该由
事件分派线程负责执行。
多线程的Swing程序
• 当一个Swing程序启动了多个线程时,要注意这些线程不要直接访问
Swing组件。否则,有可能会引发程序错误。
示例: SwingThreadTest.java
解决方法
• 所有更新Swing组件的代码,应该放到UI线程中去执行,这需要使
用EventQueue的invokeLater或invokeAndWait方法:
EventQueue.invokeLater(new Runnable() {
public void run() {
label.setText(percentage + % complete);
}
});
这句代码将会被“推送”到UI线程中去执行。
SwingWroker类
• 为了简化Swing多线程开发,JDK中提供了一个SwingWorker类。
• SwingWorker类实现了Runnable接口,它可以在独立的线程中
执行。
• SwingWorker类提供了一些方法,可以很方便地跨线程更新
Swing组件。
SwingWorker类的主要方法
方法 说明
doInBackground Defines a long computation a
您可能关注的文档
- PR触控式无纸记录器操作说明书.PDF
- PTR89应用程序编程接口V100.PDF
- PTS系列网络存储器技术白皮书-广州思唯奇计算机科技有限公司.PDF
- PublicLibraryAssessment公共图书馆的绩效评估-UniversityofIllinois.ppt
- PUI-Q1核心板说明书.PDF
- PVM并行程序设计.PDF
- QNAPTurboNAS与SSD快取技术之介绍.PDF
- R7F0C002串行阵列单元3线串行IO(从发送接收)-RenesasElectronics.PDF
- R7F0C004串行阵列单元3线串行IO(主发送接收)-RenesasElectronics.PDF
- R7F0C009定时器RD定时器模式(输入捕捉和-RenesasElectronics.PDF
文档评论(0)