Хотя этот метод может иметь смысл в некоторых ситуациях, он будет бесполезен большую часть времени.
Причина заключается в том, что создание большинства (если не всех) ваших компонентов всегда будет происходить из EDT, в результате действий пользователя (пункт меню или нажатие кнопки), которые всегда выполняются из EDT.
В тех случаях, когда у вас есть большая работа, которую нужно выполнить перед созданием панели, и вы не хотите блокировать EDT, вам следует, как это было предложено кем-то другим, использовать SwingWorker или среду Swing, которая предлагает поддержку для длинных задач ( как правило, все равно основано на SwingWorker, но не обязательно).
Что касается вашего вопроса 2, к сожалению, у вас не так много способов сделать это:
- Используйте массив из 1 элемента, как вы это сделали, это
самое простое, но и самое уродливое решение
- Создать класс ItemHolder (см.
ниже), что делает почти то же самое,
требует немного больше работы и
чище, на мой взгляд
- Последнее, используйте java.util.concurrent
объекты (Будущее и Callable);
я думаю, это было бы
но и это требует наибольшего усилия
Вот упрощенный класс ItemHolder:
public class ItemHolder<T> {
public void set(T item) {...}
public T get() {...}
private T item;
}