[JAVA ] relancer le main

pr -  
rodoplop Messages postés 77 Statut Membre -
Bonjour,

J'ai deux classe :

public class Lancement {

    /** Creates a new instance of Lancement */
    public Lancement() {
    }

    /**
     * 
     * @param args 
     */
    public static void main(String[] args) {
        Jeu jeu = new Jeu(750, 1000, 200, 345);
        ArrayList<Arme> armes = new ArrayList<Arme>();
        Dimension dim = new Dimension(500, 800);
        jeu.initSimulation();
        vueJeu vue = new vueJeu(jeu);
        //Vue vueJ = new Vue(jeu);
    }
}


et

public class vueJeu implements interfaces.Observateur {

    private Jeu jeu;
    private JFrame fenetre = new JFrame("Une partie");
    ...
    bStop.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                ImageIcon img = new ImageIcon("./src/vue/Images/win.png");
                vueJeu.this.jeu.setFinPartie(true);
                vueJeu.this.bStop.setEnabled(false);
                if (vueJeu.this.jeu.getScoreCourant() >= vueJeu.this.jeu.getObjectifScore()) {
                    JOptionPane.showMessageDialog(vueJeu.this.fenetre, "<html><b>Vous avez gagné !!!!!</b> ", "Résultat", JOptionPane.INFORMATION_MESSAGE, img);
                } else {
                    JOptionPane.showMessageDialog(vueJeu.this.fenetre, "Vous avez perdu", "Résultat", JOptionPane.INFORMATION_MESSAGE);
                }
                if(vueJeu.this.rejouer()==false){
                    System.exit(0);
                } 
            }

        ....
 public boolean rejouer() {
        boolean rejouer=true;
        int option = JOptionPane.showConfirmDialog(null, "Voulez-vous rejouer ?", "Rejouer", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (option == JOptionPane.OK_OPTION) {
            rejouer = true;
        } else if(option == JOptionPane.NO_OPTION || option == JOptionPane.CANCEL_OPTION || option == JOptionPane.CLOSED_OPTION){
            rejouer=false;
        }       
        return(rejouer);
    }
        });



Lorsque j'appuie sur le bouton stop dans vueJeu, une Joption pane me demande de choisir si je veux relancer ou pas.
Je ne sais pas comment faire pour relancer la premiere classe qui contient le main lorsque je clique sur oui.

Merci d'avance
A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Le plus simple vu ton architecture en deux classes est de faire un appel static :

if (option == JOptionPane.OK_OPTION)
    Lancement.main(null); // remplacer null par String[] args si nécessaire
0
pr
 
Je ne peux pas faire appel à lancement dans la classe vueJeu.
Netbeans refuse.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Netbeans s'octroie de toute évidence des privilèges qui ne devrait pas être, la méthode main est une méthode comme une autre, et puisqu'elle est static, elle devrait pouvoir être appelée comme je l'ai montrée.

Exemple bidon :

public class A
{
    public static void main(String[] args)
    {
        System.out.println("A");
    }
}

public class B
{
    public static void main(String[] args)
    {
        System.out.println("B");
        for (int i=0; i<5; i++)
            A.main(args);
    }
}
0
rodoplop Messages postés 77 Statut Membre 12
 
Bonjour,

Dans ton cas, pour relancer le jeu, tu doit relancer une instance de ta classe Lancement (le main est exécuté quand tu instancie ta classe)

le mieux étant de gérer le lancement de ton jeu dans une méthode autre que le main(). Par exemple : une méthode initJeu()

Ensuite tu n'aura plus qu'à appeler cette méthode lorsque tu veux relancer ton jeux.

Maintenant, à voir
0
KX Messages postés 19031 Statut Modérateur 3 020
 
le main est exécuté quand tu instancie ta classe

Non, le main est une méthode static, il n'y a pas à avoir d'instanciation pour l'appeler, ici c'est plutôt Netbeans qui fait son capricieux avec le concepteur d'interface graphique.
0
rodoplop Messages postés 77 Statut Membre 12
 
Je n'avais pas vu les messages d'avant, effectivement, me main étant statique on peut l'appeler comme tu l'as précisé.
quand je parlais d'instanciation c'était pour simplifier l'idée, le main étant rarement appelé manuellement.
0