Замена Java 5 SwingWorker - PullRequest
       6

Замена Java 5 SwingWorker

5 голосов
/ 02 ноября 2010

Наше приложение Swing выполняет некоторые длительные задачи в фоновом потоке, используя отличный класс SwingWorker.Однако многие старые Mac поддерживают только Java 5, поэтому мы хотим скомпилировать наше приложение как 5 вместо 6. Поскольку SwingWorker был представлен в Java 6, мы больше не можем его использовать.приемлемая замена, если мне нужно только сделать что-то в фоновом режиме, а затем сообщить об этом в графическом интерфейсе, когда это будет сделано?Или я забыл что-то важное?

public static void wannabeSwingWorker(final Runnable doInBackground, final Runnable callback) {
    Thread backgroundThread = new Thread(new Runnable() {
        public void run() {
            doInBackground.run();
            SwingUtilities.invokeLater(callback);
        }
    });
    backgroundThread.start();
}

Ответы [ 4 ]

10 голосов
/ 02 ноября 2010

Я позволю кому-то еще прокомментировать пригодность вашего кода, но в качестве альтернативы вы можете скачать бэкпорт Swingworker для использования в Java 5 здесь .

3 голосов
/ 02 ноября 2010

Ваш код должен работать правильно;конечно, вы потеряете все другие функции SwingWorker (возвращая частичные результаты и прогресс, будучи отменяемыми, поддерживая слушателей),

2 голосов
/ 02 ноября 2010

Взгляните на Фокстрот , который работает не так, как большинство библиотек параллелизма Swing.

Вместо того, чтобы запускать фоновый поток для выполнения длительной задачи, он имитирует подход, используемый Swing, когда вы показываете модальное диалоговое окно, выполняя долгосрочную задачу в Swing EDT и запуская новый потокдля обработки событий графического интерфейса.

При работе с долго выполняющейся задачей, которая возвращает значение, с которым вам нужно немедленно действовать, это приводит к очень хорошему процедурному / непараллельному виду фрагмента программного кода (в точности какпроверка возвращаемого значения из JOptionPane.showConfirmDialog(...)).

1 голос
/ 02 ноября 2010

Если у вас нет проблем с кодом LGPL в вашем продукте, вы можете использовать версию SwingWorker для Java 5.

...