SwingUtilities.invokeLater()怎么用

在看代码时候碰到的,记录一下

英语定义EventQueue (Java SE 23 & JDK 23) (oracle.com)

SwingUtilities.invokeLater() 是一个用于确保 Swing 组件的更新和事件处理在事件调度线程(Event Dispatch Thread,简称 EDT)中执行的方法。Swing 是一个单线程框架,所有的界面更新和事件处理都应该在 EDT 中进行,以避免潜在的线程安全问题。

下面是如何使用 SwingUtilities.invokeLater() 的步骤:

  1. 创建一个 Runnable 对象,这个对象包含你想要在 EDT 中执行的代码。Lambda可以作为Runnable对象。
  2. 将这个 Runnable 对象传递给 SwingUtilities.invokeLater() 方法。

以下是一个简单的例子:

import javax.swing.*;

public class Example {
    public static void main(String[] args) {
        // 创建一个 Runnable 对象
        Runnable task = new Runnable() {
            public void run() {
                // 在这里编写需要在 EDT 中执行的代码
                // 例如,创建和显示一个 JFrame
                JFrame frame = new JFrame("Example");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(300, 200);
                frame.setVisible(true);
            }
        };

        // 使用 SwingUtilities.invokeLater() 来确保 task 在 EDT 中执行
        SwingUtilities.invokeLater(task);
    }
}

在这个例子中,我们创建了一个 Runnable 对象,它的 run 方法包含了创建和显示一个 JFrame 的代码。然后我们使用 SwingUtilities.invokeLater(task) 来确保这段代码在 EDT 中执行。

如果你使用的是 Java 8 或更高版本,你可以使用 lambda 表达式来简化代码:

import javax.swing.*;

public class Example {
    public static void main(String[] args) {
        // 使用 lambda 表达式简化 Runnable 对象的创建
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 200);
            frame.setVisible(true);
        });
    }
}

在这个简化的版本中,我们直接在 SwingUtilities.invokeLater() 的参数中使用了 lambda 表达式,它创建并显示了 JFrame。这样做可以减少代码量,并且使代码更加简洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值