У меня есть слушатель этого действия:
this.newGameButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
MokkiGUI.this.game = newGameQuery();
MokkiGUI.this.AI = new AIPlayer(MokkiGUI.this.game.getBoard());
MokkiGUI.this.boardLabel.setText("");
MokkiGUI.this.boardLabel.repaint();
refreshScreen();
JOptionPane.showMessageDialog(null, "Starting new game", "New game", JOptionPane.PLAIN_MESSAGE);
if (MokkiGUI.this.game.getAIIndicator() % 2 == 1) {
while (makeAIMove()) {
MokkiGUI.this.refreshScreen();
}
MokkiGUI.this.refreshScreen();
}
}
});
public void refreshScreen() {
if (javax.swing.SwingUtilities.isEventDispatchThread()) {
System.out.println("Is");
} else {
System.out.println("Not");
}
MokkiGUI.this.boardLabel.setText(MokkiTest.printBoard(MokkiGUI.this.game.getBoard()));
MokkiGUI.this.boardLabel.repaint();
MokkiGUI.this.data.setText("X: " + MokkiGUI.this.game.getPlayer1name() + "\n Score: "
+ MokkiGUI.this.game.getPlayer1score() + "\n\n" + "O: " + MokkiGUI.this.game.getPlayer2name() + "\n Score: "
+ MokkiGUI.this.game.getPlayer2score());
MokkiGUI.this.data.repaint();
if (!MokkiGUI.this.game.redoable()) {
MokkiGUI.this.forwardButton.setEnabled(false);
MokkiGUI.this.allForwardButton.setEnabled(false);
} else {
MokkiGUI.this.forwardButton.setEnabled(true);
MokkiGUI.this.allForwardButton.setEnabled(true);
}
if (!MokkiGUI.this.game.undoable()) {
MokkiGUI.this.backButton.setEnabled(false);
MokkiGUI.this.allBackButton.setEnabled(false);
} else {
MokkiGUI.this.backButton.setEnabled(true);
MokkiGUI.this.allBackButton.setEnabled(true);
}
MokkiGUI.this.buttonPanel.repaint();
}
Функция refreshScreen () не работает. Они по отдельности работают в потоке диспетчера событий, и сделанные изменения отображаются только после завершения выполнения слушателя действия. Он отлично работает при вызове из конструктора MokkiGUI (), так как он отсутствует в EDT.