Redémarrage automatique

Résolu
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'aimerais savoir comment faire redémarrer un programme automatiquement en java.
Sens: Le programme tourne... Maintenant par exemple je veux redémarrer le programme.
Il faudrais dans l'idéal que une deuxième instance démarre et que juste après la précédente quitte.

Si quelqu'un sait comment faire ceci, je vous en remercierais.

PS: Extrait de la dernière tentative:
public void restart(){
    
     
            Thread t = new Thread();
            t.setName("Thread001");
            //t.start();
            t.run();
            
            System.exit(0);
            
            
            
    
    }


Résultat: L'application quitte, mais pas de deuxième instance...

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Au risque de jouer sur les mots, "redémarrer un programme", c'est à dire arrêter complètement le programme, puis qu'il démarre à nouveau, ce n'est pas possible.
En revanche, il est possible de revenir au début du programme, mais sans qu'il n'ait jamais vraiment été arrêté.

Pour faire ça, le plus simple c'est juste de rappeler la méthode main qui avait démarré le programme.

Start.main(null); // si besoin, remplacer null par un String[] args valide.

Attention : comme le programme n'a pas vraiment été arrêté, les classes déjà chargées seront réutilisées, en particulier les valeurs statiques ne seront pas remises à zéro.

Pour être plus propre, tu pourrais créer un Thread pour chaque partie, ton main ne sert alors qu'à créer les Threads successifs...
1
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
Je vais essayer
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
Le programme redémarre plus ou moins, enfin j'ai réussi à faire passer les détails inaperçus, et donc j'ai un programme ou à moins de regarder les instances (où l'on peut voir toute les fois ou javaw.exe est démarré^^) on ne sait pas qu'en fait il y a double-instance. Merci.
Résolu
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33
 
En fait je pense pouvoir détourner le doubleinstance en créant une instance d'un programme exterieur ^^
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention  
 
En effet, mais c'est là où "je jouais sur les mots" car ce n'est plus vraiment un redémarrage dans ce cas.
Ceci étant dit, il est également possible de faire ce que tu veux avec un seul programme Java, quitte à manipuler des classloader multiples, mais si u veux aller plus loin il faudrait détailler ton cas d'utilisation et par exemple ce qui n'allait pas dans ma proposition de départ...
0
TheKill_TnT Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   33 > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Simple:
Sur le memory (aka "comment télécharger un fichier depuis java..."), j'ai une commande de redémarrage, et j'aimerais que justement cette fonction redémarre le memory. Je pensais utiliser un programme externe (style MemoryLauncher) et qu'à l'extinction du memory lors de l'appui sur "redémarrer" (ou la commande dans le CMD), le Memory renvoie qqch comme "true" à un boolean et vu que c'est true enfin voilà comment je l'imagine:
Memory.jar démarré par une méthode renvoyant un boolean:
//(Machin qui détecte quand on écrit restart ou quand on appui sur le bouton){

return true;
System.exit(0);

}


MemoryLauncher.jar:
/*(Main)*/{

while(b = true){
b = start();
}

}
public boolean b = true;
public boolean start(){
//(lancement de l'app)
return false; // Soit l'app répond true/false, soit elle ne répond rien et ce return prend le relais
}

0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Oui, mais pourquoi avoir besoin de redémarrer l'application complètement ?
Dans la majeure partie des cas, il suffit de juste relancer le main...

Memory.java :
public static void main(String[] args) {
    // met à jour le programme
    // démarre le jeu
    // arrête le jeu
}

MemoryLauncher.java
public static void main(String[] args) {
    while (true) { // on boucle le Memory plusieurs fois
        Memory.main(args);
    }
}
0