Probleme Javascool

Résolu/Fermé
xCirdan Messages postés 14 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 6 mai 2015 - Modifié par Whismeril le 18/04/2015 à 10:05
xCirdan Messages postés 14 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 6 mai 2015 - 24 avril 2015 à 15:04
Bonjour a tous.

J'ai un problème avec le menu de notre bataille navale(projet en ISN). Nous voulons avoir un menu pour sélectionner le mode 1 ou 2 joueurs. Nous avons fini le programme en solo mais quand nous le rattachons au menu, le programme s'arrête après la première demande de variable. J'ai essayé de faire de meme avec un programme beaucoup plus simple, mais le résultat est le même. Quelqu'un peut il nous aider? Merci


import javax.swing. *;
import java.awt.event. *;
import java.awt. *;

JButton bouton1, bouton2,bouton3;

JFrame Menu;

class GestionClic implements ActionListener {
   public void actionPerformed(ActionEvent e) {
      if (e.getSource() == bouton1) {
         solo();
         Menu.dispose();
      } else if (e.getSource() == bouton2) {
      }
   }
}

void main() {
   Menu = new JFrame("Menu");
   bouton1 = new JButton("Solo");
   bouton2 = new JButton("Multi");
   bouton3 = new JButton("Quitter");
   GestionClic gc = new GestionClic();
   bouton1.addActionListener(gc);
   bouton2.addActionListener(gc);
   bouton3.addActionListener(gc);
   Menu.setLayout(new FlowLayout());
   Menu.add(bouton1);
   Menu.add(bouton2);
   Menu.add(bouton3);
   Menu.setSize(300, 100);
   Menu.setVisible(true);
   GridLayout GL = new GridLayout();
   GL.setColumns(0);
   GL.setRows(3);
   Menu.setLayout(GL);
   Menu.setLocationRelativeTo(null);
   Menu.setSize(500, 500);
}

void solo(){
 int i=readInteger();
 char C=readChar();
 print(i+" "+C);
}


EDIT: Ajout de la coloration syntaxique.

4 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 avril 2015 à 12:44
Bonjour,

Ton code génère une erreur, voici comment tu pourrais faire pour l'afficher dans la console :

void solo() {
    try {
        int i=readInteger();
        char C=readChar();
        print(i+" "+C);
    }
    catch (Exception e) {
        e.printStackTrace(System.out);
    }
}

L'erreur est liée au fonctionnement de Java's Cool et au mélange des deux types de fenêtres (Java et Java's cool).
java.lang.IllegalStateException: Impossible d'utiliser un dialogue modal directement d'un événement de l'interface: créer un thread

Donc deux solutions :

1) Tu continues à utiliser les fenêtres de Java's Cool et tu dois faire un Thread comme indiqué dans le message d'erreur.

class Solo extends Thread {
    public void run() {
        try {
            int i=readInteger();
            char C=readChar();
            print(i+" "+C);
        }
        catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}

void solo() {
    Thread thread = new Solo();
    thread.start();
}

2) Tu fais tout avec des fenêtres Swing, pas besoin de Thread, ni des fonctionnalités prédéfinies par Java's Cool.

void solo() {
    try {
        String i = JOptionPane.showInputDialog(Menu,
            "Entrez un nombre entier :","Java's Cool read",
            JOptionPane.QUESTION_MESSAGE);
        String c = JOptionPane.showInputDialog(Menu,
            "Entrez une chaîne sans espace :","Java's Cool read",
            JOptionPane.QUESTION_MESSAGE);
        print(i+" "+c);
    }
    catch (Exception e) {
        e.printStackTrace(System.out);
    }
}

Remarque : je ne vois pas l'intérêt d'avoir un seul GestionClic qui se rapporte à des événements différents.

class GestionClic implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == bouton1) {
            solo();
            Menu.dispose();
        } else if (e.getSource() == bouton2) {
        }
    }
}

GestionClic gc = new GestionClic();
bouton1.addActionListener(gc);
bouton2.addActionListener(gc);
bouton3.addActionListener(gc);

Il serait mieux de faire comme ceci :

class GestionClic1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        solo();
        Menu.dispose();
    }
}

class GestionClic2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    }
}

GestionClic1 gc1 = new GestionClic1();
bouton1.addActionListener(gc1);

GestionClic2 gc2 = new GestionClic2();
bouton2.addActionListener(gc2);
bouton3.addActionListener(gc2);
0
xCirdan Messages postés 14 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 6 mai 2015
Modifié par xCirdan le 18/04/2015 à 13:05
Merci pour les infos. Seulement voila, le "vrai" code pour le solo fait des centaines de lignes. Faut il faire le même procédé pour que le tout fonctionne?
En tout cas, merci pour la réponse
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 avril 2015 à 13:11
Ton code fait peut-être des centaines de lignes, mais en soit la modification est très limitée, elle concerne juste les popups Java's Cool renvoyées à l'utilisateur, donc je ne vois pas de grosses modification à faire, juste mettre un gros Thread autour de tout le fonctionnement de solo pour la méthode 1, ou remplacer les readInteger() et readChar() par des showInputDialog pour la méthode 2.
Tout le reste du code reste inchangé.
0
xCirdan Messages postés 14 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 6 mai 2015
18 avril 2015 à 13:19
Ok merci
0
xCirdan Messages postés 14 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 6 mai 2015
24 avril 2015 à 15:04
C est bon, ca marche. Merci
0