J'ai une application qui fonctionne correctement et le JFrame est lancé dans le constructeur d'une classe GameInitializer qui accepte certains paramètres de configuration. J'ai essayé de créer une interface graphique dans laquelle l'utilisateur peut spécifier ces paramètres de configuration, puis cliquer sur soumettre. Lorsque l'utilisateur clique sur Envoyer, un nouvel objet GameInitializer est créé. L'erreur que je reçois est:Erreur lors de la création de JFrame à partir de JFrame
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
at java.awt.EventQueue.invokeAndWait(Unknown Source)
at javax.swing.SwingUtilities.invokeAndWait(Unknown Source)
at game.player.humanplayer.view.HumanView.update(HumanView.java:43)
une fois soumettons est appelé ce code est exécuté:
values assigned to parames...
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
ensuite le code dans le constructeur GameInitializer est:
public GameInitializer(String playerName, AbstractPlayer opponent, String blindStructureConfig, AbstractHandState handState){
beginGame(playerName, opponent, blindStructureConfig, handState);
}
public static void beginGame(String playerName, AbstractPlayer opponent, String blindStructureConfig, AbstractHandState handState){
AbstractDealer dealer;
BlindStructure.initialize(blindStructureConfig);
AbstractPlayer humanPlayer = new HumanPlayer(playerName, handState);
AbstractPlayer[] players = new AbstractPlayer[2];
players[0] = humanPlayer;
players[1] = opponent;
handState.setTableLayout(players);
for(AbstractPlayer player : players){
player.initialize();
}
dealer = new Dealer(players, handState);
dealer.beginGame();
}
Il essentiellement cascades vers le bas et appelle finalement ce morceau de code dans la classe HumanView:
public void update(final Event event, final ReadableHandState handState, final AbstractPlayer player) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
gamePanel.update(event, handState, player);
validate();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
if(event.equals(Event.HAND_ENDING)){
try {
if(handState.wonByShowdown() || handState.isSplitPot()){
Thread.sleep(3500);
}
else{
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Avez-vous une idée pourquoi?
Postez votre code s'il vous plaît! (Et par "votre code" je veux dire "HumanView.update", pas "tout votre code".) –
ont mis à jour la question avec du code :) – Aly