Там хорошая дискуссия по EventQueue.invokeLater() here.EventQueue.invokeLater с несколькими качелями Uis
У меня есть класс контроллера, который загружает Master()
два окна пользовательского интерфейса в моем приложении. Например:
public class Master(){
public Master(){
aView = new subView();
bView = new subView();
Где subView
расширяет JFrame и имеет следующий основной метод:
public class SubView extends JFrame{
....
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SubView();
}
});}
}
SubView.main()
Обратите внимание, что устройства используются invokeLater()
. Мой вопрос как я могу invokeLater() в пределах мастера? Что-то вроде:
public class Master(){
public Master(){
aView = EventQueue.invokeLater(new subView);
bView = EventQueue.invokeLater(new subView);
Это не так просто, потому что invokeLater ничего не возвращает. Кроме того, поскольку он «вызывается позже», значения aView и bView остаются пустыми в Master. Есть ли способ вызвать оба метода таким же образом, что main()
будет ссылаться на один из них в потоке runLater?
Вам действительно нужно? Если 'Master' всегда создается на EDT, тогда нет необходимости использовать' invokeLater'. – davmac
(Также: это 'aView = subView();' предполагается сказать 'aView = новый SubView();'?) – davmac
(Наконец: 'aView = EventQueue.invokeLater (новый subView);' неправильный синтаксис для базовой конструкции. Вероятно, это означало 'aView = EventQueue.invokeLater (новый SubView());??) – davmac