3

有什么区别:

    //Some code, takes a bit of time to process
    (new SomeJFrame()).setVisible(true);

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            (new SomeJWindow()).start();//Start a new thread
        }
    });

和:

    class doGraphics extends SwingWorker<Void, Object> {

        @Override
        public Void doInBackground() {

           //Some code, takes a bit of time to process
            (new SomeJFrame()).setVisible(true);

            return null;
        }

        @Override
        protected void done() {

            (new SomeJWindow()).start();//Start a new thread

        }
    }
    (new doGraphics()).execute();

哪种方法更好用?

4

1 回答 1

15

SwingUtilities.invokeLater 获取一个 Runnable 并稍后在 ui 线程中调用它。通常用于短期运行的 ui 相关工作。

SwingWorker 在非 ui 线程中运行主要工作 - 工作线程。长时间运行的工作完成后done(),在 ui 线程(事件调度线程)中调用该方法。

但是 SwingWorker 的doInBackground()方法也可以通过调用该publish()方法发布中间结果。将SwingWorker确保要发布的结果由事件调度线程处理。您可以通过实现该process()方法来挂钩。

于 2013-10-18T08:29:08.640 回答