Swing - несколько графических интерфейсов - PullRequest
2 голосов
/ 17 января 2012

Я занимаюсь разработкой приложения с несколькими графическими интерфейсами Swing. Основной графический интерфейс пользователя имеет кнопку, которая после нажатия вызывает другой графический интерфейс. Проблема в том, что оба окна зависают после нажатия этой кнопки и появления нового графического интерфейса.

Я искал SwingUtilities.invokeLater, но я не могу использовать его для создания первого GUI, так как я передаю ему ссылку на объект, который я не хочу, чтобы он был "финальным" в качестве компилятора требования.

Первый графический интерфейс создается с:

MainUI gui = new MainUI(player);
gui.setVisible(true);

Второй создается с:

private void challengeBtnActionPerformed(java.awt.event.ActionEvent evt) { 
   if (board.isVisible()) {
      board.dispose();
      resetComponents();
   } else {
      MainUI gui = new MainUI(player);
      gui.setVisible(true);
   }
}

Можете ли вы помочь мне, пожалуйста?

1 Ответ

6 голосов
/ 17 января 2012

Еще раз: вы не должны взаимодействовать с компонентами Swing ни из одного потока, кроме EDT .

Вы должны вызвать ваш MainUI следующим образом:

public class MainUI extends javax.swing.JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainUI().setVisible(true);
            }
        });
    }
}

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

ОБНОВЛЕНИЕ:

Следующий код должен работать.

public class MainUI extends javax.swing.JFrame {
    public static void main(String[] args) {
        final Player player = new Player();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainUI(player).setVisible(true);
            }
        });
        player.changeState(); // You can do this
        // player = new Player(); // You can't do that
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...