2

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()に入れることができますが、それを実行するためにランナブルも実装する別の実行メソッドが必要なのはなぜですか?このコンセプトの背後にある考え方は何ですか?ありがとう。

4

3 に答える 3

9

Oracle SDNから:スレッドとスイング

Swingコンポーネントが実現されたら、そのコンポーネントの状態に影響を与える、または依存する可能性のあるすべてのコードを、イベントディスパッチスレッドで実行する必要があります。

その要点は、Swingが正常で実行の準備ができたときに、コードを実行する必要があるということです。あなたがそれを呼ぶとき、必ずしも正しいとは限りません。

于 2011-11-10T13:41:34.243 に答える
1

メソッドrun()は、分離されたスレッドで開始されます。したがって、GUIパーツは他のアプリケーションから「スタンドアロン」で動作し、描画中に停止しないでください。

于 2011-11-10T13:39:52.013 に答える
0

コードをスレッドで実行する場合は、runnableインターフェイスを実装する必要があります。インターフェイスを実装するときは、メソッドrunnableを実装する必要がありますrun()

于 2011-11-10T13:36:20.900 に答える