在我的main(String[] args)
方法中,我没有调用SwingUtilities.invokeAndWait
来在Swing线程上运行main1
方法。我一直认为我需要这个用于线程安全。我被告知没有必要,因为执行任何GUI代码的第一个线程变成 GUI线程。换句话说,你只能从一个线程使用Swing,但是哪一个并不重要。但是我找不到这方面的来源,我想确定一下。
答案 0 :(得分:7)
你被告知的是假的。 main
方法最初将由主线程调用。所有与GUI相关的活动必须在名为事件调度线程的完全独立的线程上执行。主线程不成为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));
}
});
}
}