Довольно уверен, что все эти подходы будут работать, но я был бы признателен за то, что это лучшее.использование invokeLater
Рассмотрите аргумент в пользу сценария (неудачного), в котором вы меняете код изменения кода и достаточно интенсивный (средний 500 мс) логический код, смешанный и неотделимый. все изменяющиеся компоненты ui находятся на одной панели.
01 new Thread(){
02 public void run(){
03
04 for (int i = 0; i < 100; i++){
05 // some processing
06 doSomething();
07 // update some ui components
08 panel.doSomeUi();
09 }
10
11 panel.revalidate();
12 panel.repaint();
13
14 }}.start();
Какой из следующих трех подходов вы выбрали бы и почему?
- обертывание весь код в invokeLater
- вызов invokeLater внутри doSomeUi(), а затем снова возобновляют/перекрашивать
- использовать только invokeLater для REVALIDATE/перекрашивать в конце
Для шахты:
вариант 1 будет висеть в процессе обработки событий (EPT), в то время как вся обработка происходит
вариант 2 имел бы накладные соображения при создании многих новых рабочих столов и в особых случаях может привести к обновлению ui в полузаполненном состоянии, если для компонентов необходимы некоторые из последующих изменений ui.
вариант 3 был бы наиболее эффективны, но могут иметь некоторые проблемы с обеспечением безопасности потоков.
Желаем услышать другие мнения.
Я приму этот ответ, если кто-то не перейдет немного глубже ... – pstanton