为了账号安全,请及时绑定邮箱和手机立即绑定

SwingUtilities 方法参数包含整个方法体?

SwingUtilities 方法参数包含整个方法体?

DIEA 2021-06-10 14:09:04
我一直在阅读 SwingUtilities.invokeLater() 方法,我在很大程度上理解它的目的。在处理 GUI 组件时,这些组件上的所有操作都需要在同一个 Event 线程上完成,以避免竞争等。然而,我认为很多问题都没有展开,代码实际上是如何工作的?看着它:SwingUtilities.invokeLater(new Runnable(){    public void run()    {        //method body code    });我的问题是,这是如何工作的?我们正在过的invokeLater()方法的新的Runnable OBJ(我认为是的Runnable接口,无论如何,我们如何实例化一个构造函数new Runnable()?),然后附加整个方法体与它的方法调用中:{//Method body code});。这怎么可能?我从未见过将整个方法体作为其参数之一的方法。当我尝试用我自己的方法复制它时,我收到错误,表明我无法在方法参数中提供整个方法主体。因此,我回到我最初的问题,这实际上是如何工作的。也许我多虑了/忽略了,但非常感谢任何帮助。
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

匿名类。您可以传递任何实现 的类Runnable,甚至是匿名类。


查看完整回答
反对 回复 2021-06-23
?
精慕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());


查看完整回答
反对 回复 2021-06-23
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我有,这是如何工作的?


您正在使用匿名类实现接口的run()方法Runnable。


你也可以这样做:


Runnable run = new Runnable()

{

    public void run()

    {

        //method body code

    }

};


SwingUtilities.invokeLater( run );


查看完整回答
反对 回复 2021-06-23
  • 3 回答
  • 0 关注
  • 273 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信