Redémarrage automatique

Résolu/Fermé
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 - Modifié le 20 mai 2018 à 21:41
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 4 juin 2018 à 19:43
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 mai 2018 à 22:13
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 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
20 mai 2018 à 23:32
Je vais essayer
0
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
21 mai 2018 à 15:38
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 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
3 juin 2018 à 20:03
En fait je pense pouvoir détourner le doubleinstance en créant une instance d'un programme exterieur ^^
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019
3 juin 2018 à 20:17
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 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
4 juin 2018 à 19:28
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 juin 2018 à 19:43
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