与在Java Swing程序中使用SwingUtilities.invokeLater()方法有关的一些疑问

安德里亚·诺比利(AndreaNobili)

我正在研究Java Swing,并且与我正在阅读的这个简单的代码教程有一些疑问:

package com.andrea.execute;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

/* An istance of a SimpleExample class is a JFrame object: a top level container */
public class SimpleExample extends JFrame {

    /* Create a new SimpleExample object (that is a JFrame object) and set some property */
    public SimpleExample() {
        setTitle("Simple example");
        setSize(300, 200);
        setLocationRelativeTo(null);                // Center the window on the screen. 
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                SimpleExample ex = new SimpleExample();
                ex.setVisible(true);
            }
        });
    }
}

逻辑非常简单:我有一个SimpleExample类,该类继承自JFrame Swing类。因此,SimpleExample将是顶级容器。

该类还包含main()方法,现在我有2个疑问:

1)为什么在main()方法中执行以下代码:

SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                SimpleExample ex = new SimpleExample();
                ex.setVisible(true);
            }
        });

在SwingUtilities类上调用invokeLater()方法,并向其传递一个新的Runnable对象。

阅读文档,我知道这是将应用程序放置在Swing事件队列中的一种方法。它用于确保所有UI更新都是并发安全的。

我有一些问题要理解的是它是如何实现的。

invokeLater()方法输入参数内它传递了这个“东西”:

new Runnable() {
        @Override
        public void run() {
            SimpleExample ex = new SimpleExample();
            ex.setVisible(true);
        }
    });

这是什么东西?什么代表?以及它是如何工作的?

特纳克斯

安德里亚

阿列克谢·奥丁佐夫(Alexey Odintsov)

这是一个实现Runnable接口匿名类

您可以在没有匿名类的情况下使用它:

class SimpleExample extends JFrame {

    public SimpleExample() {
        setTitle("Simple example");
        setSize(300, 200);
        setLocationRelativeTo(null);                
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new App());
    }
}

class App implements Runnable {

    public void run() {
        SimpleExample ex = new SimpleExample();
        ex.setVisible(true);
    }
}

但是匿名类更方便。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我对Java中使用外部文件夹有一些疑问

请分享一些有关Java中的rehash方法的见解?

在Java游戏循环中使用“ SwingUtilities.invokeLater()”是一种不好的做法吗?

有关Java多线程的一些问题,

有关Javax和Java包的一些基本问题

有关Java线程和进程优先级的一些问题

有关java.lang.NoClassDefFoundError的一些困惑

有关“ angularJS与Plupload一起使用的一些问题

有关C ++中Linter的一些疑问

有关目标NAT的一些疑问

我可以使用wifi获得有关速度的一些建议吗?

DBpedia:查询有关使用SPARQL的特定人员的一些信息

有人可以为我提供有关 Java 中 OpenLog 的一些指导吗?

对于Android开发,有关Java SDK和32/64位版本的一些问题

在Java中需要一些有关数组构造函数以及比较数组结果的帮助

需要帮助理解有关 While 循环条件语句和类型转换的一些基本 Java 概念

需要一些有关如何基于golang实现Restfull API应用程序的帮助

有关如何为数据绑定Windows Forms应用程序实现MVP模式的一些准则

有关cg着色器程序的一些问题(OGRE中的深度阴影映射)

需要一些有关为我的应用程序用户创建云存储的建议

为什么要在main方法中使用SwingUtilities.invokeLater?

有关Java程序的建议

对Spring Framework应用程序中JDBC在RowMapper中使用的一些疑问

有关WordPress处理水平主菜单可视化的一些疑问

与Spring中的AOP配置有关的一些疑问

有关端口转发和数据包的一些疑问

Java:即使使用SwingUtilities.invokeLater,线程也不会修改GUI

为什么带有几个“或”语句的代码比在Java中使用查找表要快一些?

运行一些旧的Java小程序有困难,我有Java 8和appletviewer