5

在我的main(String[] args)方法中,除了调用在 Swing 线程上SwingUtilities.invokeAndWait运行方法外,我什么都没有。main1我一直认为我需要这个来保证线程安全。有人告诉我这不是必需的,因为执行任何 GUI 代码的第一个线程成为GUI 线程。或者换一种说法,你只能从一个线程中使用 Swing,但不管是哪个线程。但我找不到这方面的来源,我想确定一下。

4

1 回答 1

7

你被告知的是错误的。该main方法最初将由主线程调用。所有与 GUI 相关的活动都必须在称为Event Dispatch Thread的完全独立的线程上执行。主线程不会成为 EDT。

一个很好的例子来看看我在说什么:

public class ThreadTest {
    public static void main(String[] args) {
        final Thread main = Thread.currentThread();
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Thread edt = Thread.currentThread();

                System.out.println(main);
                System.out.println(edt);
                System.out.println(main.equals(edt));
            }
        });
    }
}
于 2012-06-12T23:05:33.877 回答