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

我一直在阅读 SwingUtilities.invokeLater() 方法,我在很大程度上理解它的目的。在处理 GUI 组件时,这些组件上的所有操作都需要在同一个 Event 线程上完成,以避免竞争等。


然而,我认为很多问题都没有展开,代码实际上是如何工作的?看着它:


SwingUtilities.invokeLater(new Runnable()

{

    public void run()

    {

        //method body code

    }

);

我的问题是,这是如何工作的?我们正在过的invokeLater()方法的新的Runnable OBJ(我认为是的Runnable接口,无论如何,我们如何实例化一个构造函数new Runnable()?),然后附加整个方法体与它的方法调用中:{//Method body code});。这怎么可能?我从未见过将整个方法体作为其参数之一的方法。


当我尝试用我自己的方法复制它时,我收到错误,表明我无法在方法参数中提供整个方法主体。因此,我回到我最初的问题,这实际上是如何工作的。也许我多虑了/忽略了,但非常感谢任何帮助。


DIEA
浏览 274回答 3
3回答

慕村225694

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

精慕HU

除了其他答案之外,我还想补充一点。用于理解您的 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());

PIPIONE

我有,这是如何工作的?您正在使用匿名类实现接口的run()方法Runnable。你也可以这样做:Runnable run = new Runnable(){    public void run()    {        //method body code    }};SwingUtilities.invokeLater( run );
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java