À proprement parler, un programme Java ne peut pas se relancer lui-même, car il doit tuer la JVM dans laquelle il s'exécute, puis la relancer, mais une fois que la JVM n'est plus en cours d'exécution (tuée), aucune action ne peut être entreprise.
Vous pourriez faire quelques tours de passe-passe avec des classloaders personnalisés pour charger, emballer et relancer les composants AWT, mais cela risque de causer de nombreux maux de tête en ce qui concerne la boucle d'événements de l'interface graphique.
Selon la façon dont l'application est lancée, vous pourriez lancer la JVM dans un script enveloppant qui contient une boucle do/while, qui continue jusqu'à ce que la JVM sorte avec un code particulier, alors l'application AWT devrait appeler System.exit(RESTART_CODE)
. Par exemple, en pseudo-code de script :
DO
# Launch the awt program
EXIT_CODE = # Get the exit code of the last process
WHILE (EXIT_CODE == RESTART_CODE)
L'application AWT devrait quitter la JVM avec autre chose que le RESTART_CODE lors d'une terminaison "normale" qui ne nécessite pas de redémarrage.
2 votes
Peut-être que je ne comprends pas votre question. Vous voulez que votre application ait un bouton qui redémarre l'application ? Donc, une fois que l'application n'est plus en cours d'exécution, elle devrait être capable de redémarrer elle-même ? Cela me semble impossible.
0 votes
Je ne demande pas qu'après l'arrêt de la JVM, je demande comment je peux faire renaître mon cadre java principal ?
2 votes
Pas impossible. Je vois le workbench eclipse redémarrer fréquemment, même Windows fait ce tour après les mises à jour. L'hypothèse fausse est que l'application est la seule chose en cours d'exécution, sans rien en dessous. Nous aurons besoin d'un lanceur capable de redémarrer, des tortues sur toute la ligne.
0 votes
De la même manière que dans une application C#, où vous pouvez écrire System.restart() pour le faire ?
0 votes
@aniaz alors vous devriez mettre à jour la question pour indiquer que vous voulez afficher/masquer le cadre. L'application n'est PAS le cadre.
0 votes
Si vous avez utilisé correctement OSGI, vous n'aurez peut-être pas besoin de redémarrer.