У меня есть пара вопросов относительно Swing и использования EDT для обновлений графического интерфейса.Я только начал читать об этом материале, так что я полный новичок в этой области:
- Какие операции необходимы для выполнения в EDT? Если они этого не делают, просто возникает исключение?
- Есть ли какое-то конкретное время, когда мы на самом деле автоматически оказываемся на EDT?
- Если мы планируем задачу, используя
SwingUtilities.invokeLater
, мы ставим ее в очередь в текущую очередь задач обновления графического интерфейса (EDT ), верно?
- Я предполагаю, что доступ к вышеуказанной очереди синхронизируется или используется некоторая параллельная коллекция, но если я планирую две задачи обновления графического интерфейса из двух фоновых потоков, невозможно сказать, какая из них будет добавлена первой? Например, если поток 1 ПЕРВЫЙ отправляет задачу установки текста JLable в значение «да», а затем, вскоре после этого, появляется второй поток и отправляет задачу установки этого значения в «нет», гарантируем ли мы, что результат будет «да», или это просто вопрос того, как эти вещи планируются ОС?
Как именно SwingWorker обеспечивает запуск метода done()
в EDT? Он устанавливает следующий код:
future = new FutureTask<T>(callable) {
@Override
protected void done() {
doneEDT();
setState(StateValue.DONE);
}
};
поэтому мне было интересно, гарантирует ли FutureTask, что invokeLater
вызывается?
Спасибо за все ваши ответы.
задан Keeley Hoek 6 July 2019 в 17:57
поделиться