В чем смысл "быстрого" в Swing Timers? - программирование
Подтвердить что ты не робот

В чем смысл "быстрого" в Swing Timers?

Из учебника по Java:

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

Что значит "быстро"? Я имею в виду, что это не точно, меньше минуты быстро или что?

например, если я хочу сделать анимацию (1 минута) с некоторыми панелями, переместив их, измените их прозрачность и... и пользователь просто увидит панели и не будет работать с ними ( нет ввода-вывода), теперь Таймер - хорошая идея для такой ситуации?

4b9b3361

Ответ 1

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

Однако позже на странице они говорят, что если у вас сложное и параллельное приложение, загляните в класс SwingWorker и узнайте о нем concurrency в отношении качания.

Концерн не обязательно, как быстро все работает, но что оно в правильном порядке.

В SwingWorker вы узнаете, что в многопоточных приложениях Swing есть две основные проблемы:

  • Затрагивающие время задачи не должны запускаться в потоке отправки событий. В противном случае приложение перестает отвечать на запросы.

    Компоненты Swing должны быть доступны только в теме Диспетчер событий.

Ответ 2

Чтобы ответить на ваш конкретный вопрос.

Если я хочу сделать анимацию (1 минута) с некоторыми панелями, переместив их, измените их прозрачность и... и пользователь просто увидит панели и не будет работать с ними (нет I/O), теперь Таймер - хорошая идея для такой ситуации?

Да, для плавной анимации требуется таймер.

Предположим, вы хотите отображать 40 кадров в секунду. Это означает, что у вас есть 25 миллисекунд для подготовки и отображения каждой панели.

Очевидно, чем больше вычислений вы можете перемещать за пределы цикла анимации, тем лучше. Для создания панели требуется всего несколько миллисекунд на современных персональных компьютерах. Вычисление панели может занять более 25 миллисекунд.

Итак, за минуту анимации вам нужно 2400 панелей. Предварительное вычисление этих панелей и просто их рендеринг приведет к более плавной анимации.

Ответ 3

В этом контексте нет фиксированного ограничения времени. Однако вы должны предположить, что любая задача, занимающая более нескольких десятков миллисекунд, обычно не считается быстрой. Имейте в виду, что любой код, который работает на EDT, может создавать всевозможные проблемы с вашим графическим интерфейсом приложения. Вот почему в документации предлагается использовать SwingWorker.

Это также зависит от задержки вашего Timer. Если он работает каждые 50 мс, то задача, которая работает в течение 30 мс, - это способ замедлить работу. Однако, если ваша задача выполняется каждые 5-10 минут всего за 30 мс, тогда она может быть приемлемой. Вам нужно будет запустить несколько тестов, чтобы увидеть, имеет ли ваш Timer какое-либо видимое влияние на ваше приложение.

Отметьте article для получения дополнительной информации об EDT. Кроме того, этот ответ содержит много информации о том, как использовать объекты SwingWorker.