有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing显示JavaGUI是否需要特殊处理?

我在看Java中GUI的一些示例代码,我想知道显示GUI的正确方式是什么。假设为某些GUI编写了createAndShowGUI()方法。我看到了这样的情况:

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

如果不使用javax,只在main方法的末尾调用createAndShowGUI()是错误的。荡秋千?或者我想我真正的问题是这里发生了什么。我对线程很熟悉,但我不确定为什么有必要创建一个新线程(这里是这样吗?)以显示GUI


共 (2) 个答案

  1. # 1 楼答案

    因为与GUI相关的一切都应该通过Event Dispatch ThreadEDT)完成,这就是Java管理整个接口绘图的方式。基本上,该方法将传递的Runnable对象的run()方法的执行委托给正确的线程

    请注意Runnable不是一个Thread,它只是一个接口,提供一个执行某些操作的方法(因此类是可运行的)。但是这里没有涉及线程,ThreadRunnable扩展的事实只是因为线程也是一个Runnable对象,可以执行某些东西

  2. # 2 楼答案

    与UI(Swing或AWT)的所有交互都必须在事件调度线程的上下文中执行

    Swing(和AWT)组件不是线程安全的,从EDT以外的任何线程更改它们中的任何一个都可能导致损坏的更新、绘制技巧、死锁,并可能导致VM崩溃。众所周知,它们也很难调试

    你可能想通读一遍

    我还应该补充,当执行main方法时,它正在VM为它创建的任何线程中运行。这保证不是EDT,因为在需要之前它不会开始

    这就是为什么好的Swing程序总是以类似^{的东西开始。您也可以使用SwingUtilities.invokeLater,但基本上是一样的