Зачем мне нужен runnable вместо того, чтобы звонить напрямую с main? - PullRequest
2 голосов
/ 10 ноября 2011

Простой код из 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 ]

9 голосов
/ 10 ноября 2011

Из Oracle SDN: Threads и Swing

После реализации компонента Swing весь код, который может влиять или зависеть от состояния этого компонента, должен выполняться впоток рассылки событий.

Суть в том, что код должен быть запущен, когда Swing хорош и готов к его запуску.Не обязательно правильно, когда вы звоните.

1 голос
/ 10 ноября 2011

Метод run () запускается в отдельных потоках. Так что ваша часть с графическим интерфейсом работает "автономно" от других приложений и не останавливает ее во время рисования.

0 голосов
/ 10 ноября 2011

Если вы собираетесь запускать свой код в потоках, вам нужно будет реализовать интерфейс runnable.При реализации интерфейса runnable необходимо реализовать метод run().

...