Это в порядке для изменения модели вне рабочего потока Swing?

Считайте C# ключевым словом. Компилятор требует, чтобы вызывающая сторона метода подала заявку ключевое слово любому args, даже при том, что это уже знает, ли они. Это предназначается для улучшения удобочитаемости. Хотя с современными IDE я склонен думать, что это - задание для синтаксиса (или семантический) выделение.

6
задан Carl Smotricz 4 December 2009 в 08:32
поделиться

3 ответа

Обычно изменение модели должно быть заключено в invokeLater (...). В коде модели нет разделения на большинство классов качания, в которых я смотрел.

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

5
ответ дан 10 December 2019 в 02:48
поделиться

Если события запускаются из EDT и обновляют компоненты Swing, это может стать проблемой.

В тексте Swing события могут или не могут (!) Передаваться в EDT . Это усложняет тестирование. Неудивительно, что API бесполезен в многопоточной среде.

Итак: проще всего сохранить модель в EDT, и другие потоки должны передавать сообщения (включая EventQueue.invokeLater ). В качестве альтернативы вы можете поставить большой замок вокруг всего, что сложнее (и вам, вероятно, все равно придется передавать данные в EDT). Попытка микросинхронизации очень затруднительна.

2
ответ дан 10 December 2019 в 02:48
поделиться

Да, определенно нормально.

Хотя это правда, вам не следует изменять компоненты Swing вне EDT. Вы, безусловно, можете вносить изменения в их модели за пределами EDT.

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

См .: http://java.sun.com/products/jfc/tsc/articles/architecture/#roots

См. Часть о модели событий JavaBeans.

Таким образом модели передают свое измененное состояние в GUI безопасным способом EDT. При создании новых компонентов графического интерфейса вы должны следовать этому шаблону проектирования.

Также обратите внимание на различие между моделями состояния графического интерфейса пользователя и моделями данных приложения.

Внесение изменений в модели из EDT по-прежнему требует осторожности. Фактически, большинство проблем Swing возникает, когда программист изменяет модель в EDT, тогда как они должны изменять ее из отдельного потока. (Печально известная проблема замороженного графического интерфейса)

Также ничто из этого не мешает полностью осознавать типичные ловушки многопоточности.

Но вы определенно можете вносить изменения в JTableModel вне EDT.

2
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: