我一直在阅读 SwingUtilities.invokeLater() 方法,我在很大程度上理解它的目的。在处理 GUI 组件时,这些组件上的所有操作都需要在同一个 Event 线程上完成,以避免竞争等。然而,我认为很多问题都没有展开,代码实际上是如何工作的?看着它:SwingUtilities.invokeLater(new Runnable(){ public void run() { //method body code });我的问题是,这是如何工作的?我们正在过的invokeLater()方法的新的Runnable OBJ(我认为是的Runnable接口,无论如何,我们如何实例化一个构造函数new Runnable()?),然后附加整个方法体与它的方法调用中:{//Method body code});。这怎么可能?我从未见过将整个方法体作为其参数之一的方法。当我尝试用我自己的方法复制它时,我收到错误,表明我无法在方法参数中提供整个方法主体。因此,我回到我最初的问题,这实际上是如何工作的。也许我多虑了/忽略了,但非常感谢任何帮助。
3 回答
![?](http://img1.sycdn.imooc.com/545861e40001199702200220-100-100.jpg)
精慕HU
TA贡献1845条经验 获得超8个赞
除了其他答案之外,我还想补充一点。
用于理解您的 Java 代码示例
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//method body code
}
);
了解 Java 编译器如何实际处理它会很有帮助。编译器做了以下两件事:
它创建一个匿名类(以花哨的类名结尾$1或类似)实现Runnable接口:
class YourEnclosingClass$1 implements Runnable {
public void run() {
//method body code
}
}
然后它将这个匿名类与new操作符一起使用:
SwingUtilities.invokeLater(new YourEnclosingClass$1());
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
PIPIONE
TA贡献1829条经验 获得超9个赞
我有,这是如何工作的?
您正在使用匿名类实现接口的run()方法Runnable。
你也可以这样做:
Runnable run = new Runnable()
{
public void run()
{
//method body code
}
};
SwingUtilities.invokeLater( run );
添加回答
举报
0/150
提交
取消