Вопрос

я читал Невероятно богатые клиенты недавно и заметил, что хотя версия Java 6, о Concurrent Framework нет упоминания.Итак, они говорят о java.util.Timer и javax.swing.Timer, но не о ExecutorService.

О преимуществах ExecutorService я прочитал в вопросе "Java-таймер против ExecutorService" и решил использовать второе вместо первого.Но в книге говорится о javax.swing.Timer и о его преимуществах, связанных с разработкой Swing.

Итак, означает ли это, что для разработки Swing (анимация кнопок и т. д.) javax.swing.Timer по-прежнему является лучшим выбором или в новой Concurrent Framework есть соответствующий класс, который его заменяет?

Это было полезно?

Решение

Ну, по крайней мере, Swing Timer работает на EDT, так что вам не нужно все оборачивать вызовами invokeLater. Он также хорошо связан с Swing, так как использует Actions, ActionListeners и другие связанные с Swing классы.

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

Ознакомьтесь с использованием таймеров в приложениях Swing . может содержать больше информации, чтобы отклонить (извините) решение.

Другие советы

Я бы сказал, что для простых вещей, связанных с колебаниями, лучшим выбором является javax.swing.Timer из-за упомянутых преимуществ здесь .

  

Обратите внимание, что задача таймера Swing   выполняется в событии отправки   нить. Это означает, что задача может   безопасно манипулировать компонентами, но это   также означает, что задача должна   выполнить быстро.

С другой стороны, если вам нужно выполнить не связанные с колебанием или более сложные / длительные операции обработки, ExecutorService очень надежен и определенно подходит.

Просто предложение, развивающее то, что советовал Бруно: один из способов использования превосходных утилит параллельного выполнения Java 1.5+ без нарушения Swing — это ExecutorService делать всю тяжелую работу (как сказал Бруно), но как только это будет сделано, ExecutorService поток должен передать взаимодействие с фактическими компонентами пользовательского интерфейса потоку AWT в Runnable, используя один из:

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

Эти методы передают исполняемый файл для выполнения потоком AWT.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top