为什么我需要有一个runnable而不是直接从main调用?

时间:2011-11-10 13:32:12

标签: java swing event-dispatch-thread

来自java.sun的简单代码:

public class BasicApp implements Runnable {

    JFrame mainFrame;
    JLabel label;

    public void run() {
        mainFrame = new JFrame("BasicApp");
        label = new JLabel("Hello, world!");
        label.setFont(new Font("SansSerif", Font.PLAIN, 22));
        mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        mainFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                mainFrame.setVisible(false);
                // Perform any other operations you might need
                // before exit.
                System.exit(0);
            }
        });
        mainFrame.add(label);
        mainFrame.pack();
        mainFrame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable app = new BasicApp();
        try {
            SwingUtilities.invokeAndWait(app);
        } catch (InvocationTargetException ex) {
            ex.printStackTrace();
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }
}

我可以把所有这个方法放到main()中,但是为什么我需要一个单独的run方法来实现runnable来执行呢?这个概念背后的想法是什么?谢谢。

3 个答案:

答案 0 :(得分:9)

来自Oracle SDN:Threads and Swing

  

一旦实现了Swing组件,所有可能影响或依赖于该组件状态的代码都应该在事件派发线程中执行。

它的要点是当Swing良好并准备好运行它时,需要运行代码。你打电话时不一定正确。

答案 1 :(得分:1)

方法run()在分离的线程中启动。因此,您的GUI部件可以从其他应用程序“独立”工作,并且在绘图期间不会停止。

答案 2 :(得分:0)

如果您打算在线程中运行代码,那么您需要实现runnable接口。实现runnable接口时,需要实现run()方法。