请教:这是一种什么用法?

testpwd 2010-09-27 09:38:35
看到别人写的代码:

EventQueue.invokeLater(new Runnable()
{
public void run()
{
....
}
});


看起来像是启动一个线程,并在线程中做一些事情,为什么放在EventQueue.invokeLater中呢?

(为什么不直接创建一个Thread对象)

这是什么意思呢?

这种写法主要用于什么场合呢?
...全文
251 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsdhla 2010-10-01
  • 打赏
  • 举报
回复
匿名内部类,如果一个类对象,它只使用一次的话,可以这样写
pywepe 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 david2083 的回复:]

就是个闭包而已
[/Quote]

这叫闭包吗?
zhuwen9 2010-10-01
  • 打赏
  • 举报
回复
EventQueue定义了一个invokeLater(Runnable instance)方法
调用的时候EventQueue.invokeLater(new Runnable(){public void run(){};})
其中的参数并不是实现创建好的,而是在调用的时候才创建;
也可以EventQueue.invokeLater(runnableInstance);
前提是runnableInstance实现了Runnable接口
antlovestudy 2010-10-01
  • 打赏
  • 举报
回复
节省代码长度,呵呵,学习!
lujun1985 2010-09-30
  • 打赏
  • 举报
回复
其实用Thread类也是可以的,只要你不启动这个Thread,效果和Runnable一样
你可以试一下EventQueue.invokeLater(new Thread() {
public void run() {
....
}
});
bastengao 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 testpwd 的回复:]

那为什么不用Thread对象呢?
[/Quote]因为 awt, 或者 swing 为了确保所有的组件是同步的,所以他被设计为单线程的,同一时刻,只有一个线程(事件分发线程,EDT)在操作 组件。所以,要想能正确运行,用户也必须在事件分发线程中操作组件,EventQueue.invokeLater(Runnable),提供了这个方法,让用户的操作在事件分发线程中完成。
lujun1985 2010-09-30
  • 打赏
  • 举报
回复
new Runnable() {} 创建一个“可以被执行”的对象,但这个对象具体什么时候开始执行由EventQueue来决定。

通常你所写的new Thread().start()是创建了这个可执行对象,并且开始执行
「已注销」 2010-09-30
  • 打赏
  • 举报
回复
EventQueue.invokeLater

相当于,定义了一个任务,这个任务在将来的某个时刻被awt线程调用执行。
就好比,放学了,老师给你布置个任务。你回家做。
tg008007x3 2010-09-30
  • 打赏
  • 举报
回复
学习!
panrui277 2010-09-30
  • 打赏
  • 举报
回复
匿名类
zhang_zi_han 2010-09-30
  • 打赏
  • 举报
回复
lz主的问题其实很简单
在java中并不像别的语言那样能直接传入一个代码块,而是传入一个对象
其中:
EventQueue.invokeLater(new Runnable()
{
public void run()
{
....
}
});
的 new Runnable(){run()}只是一种创建对象的简便方式,这样写避免了先创建一个继承Runable接口的
类,然后再创建对象,所以比较简便,在多线程中经常用到。
具体的请看一下面向对象中对面向接口编程的介绍
zxb346571110 2010-09-30
  • 打赏
  • 举报
回复
不错,学习中
24K純帥 2010-09-30
  • 打赏
  • 举报
回复
学习了。。
DB5155 2010-09-30
  • 打赏
  • 举报
回复
学习了
testpwd 2010-09-30
  • 打赏
  • 举报
回复
ls 的理解错了,你说的这种创建对象的简便写法我知道。我现在想问的只是
EventQueue.invokeLater(...)这种写法。这种写法我以前没用过,
我以前用的都是直接创建一个线程对象来做,故请教两者的区别。
blazingfire 2010-09-27
  • 打赏
  • 举报
回复
也可以用thread对象,thread也实现了Runnable接口
apl330 2010-09-27
  • 打赏
  • 举报
回复
还不是很明白
testpwd 2010-09-27
  • 打赏
  • 举报
回复
那为什么不用Thread对象呢?
david2083 2010-09-27
  • 打赏
  • 举报
回复
run里的代码会在将来的某个时间被调用
david2083 2010-09-27
  • 打赏
  • 举报
回复
就是个闭包而已
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧