Lancement .bat d'une classe java et gestion des flux de la sortie standard.
Bonjour,
Je travail actuellement sur un script .bat, auquel je doit ajouter une interface graphique, ce qui ai fait.
Maintenant j'ai deux soucis, le premier:
- je n'arrive pas a exécuter correctement mon .java.
J'ai mi dans un .bat ceci:
Code:
1 2
| start java -classpath /*chemin lib*/ /*Nom class*/
exit |
Cet appel fonctionne mais la fenêtre dos reste ouverte.je voudrai la masquer tout en gardant l'interface graphique ouverte.
- second problème, dans la même idée précédemment, je ne dois pas avoir de fenêtre dos, pour ce faire l'utilisation /C start /B /MIN, enlève la fenêtre dos, le problème c'est que je veux donc catcher toute les exeption et les mettre dans une fenêtré style pop-up qui fait défilé le texte mais je n'y arrive pas.
mon code est un simple, j'ai juste un pannel avec quelque bouton, je sais comment générer un popup.. avec JDialog.. mais je n'arrive pas a mettre le texte a jour dessus par rapport a la sortie qu'on récupérer du process lancer..
je lance mon .bat à l'aide d'un ProcessBuilder et je récupére les logs avec InputStream et je ne sais pas comment les mettre dans mon Jdialog et de les afficher a la volé.
Je crois que j'ai compris
Pour faire simple, votre code Java n'est rien d'autre qu'une sorte de monitoring sur l'activité d'une routine système mise en œuvre par des commandes DOS.
Votre difficulté vient du fait que vous lancez un batch. Ce type de fichier, pour être exécuté par l'explorer de Windows nécessite un environnement texte, c'est pourquoi Windows ouvre une fenêtre MS-DOS pour y exécuter le Batch. Si votre code Java lance le batch, il ne peut pas empêcher la fenêtre MS-DOS nécessaire pour l'exécution de ce dernier de s'afficher. La seule solution, c'est soit de reprendre complètement le traitement et le réaliser en java dans le code de votre interface graphique, et au final, plus de batch du tout. Soit, si les commandes contenues dans le batch que vous lancez ne sont pas trop nombreuse, rien ne vous interdit de les exécuter depuis votre code java une après l'autre en récupérant le flux d'entrée à chaque fois et ainsi capturer avec certitude l'intégralité des dialogues de la console.
Pour résumer, si depuis votre code Java vous lancez un batch, vous aurez une fenêtre MS-DOS. Par contre, si vous lancez directement une commande DOS, alors vous n'aurez aucune fenêtre MS-DOS, et toutes les sorties vers la console de la commande ainsi lancée seront orientées vers votre InputStream. Je suppose que dans le cas du batch, comme le fenêtre MS-DOS s'affiche, la sortie vers la console de l'exécution du batch se fait vers la fenêtre et n'est pas orienté vers votre InputStream.
Dernière précision :
Pour lancer une application java depuis Windows sans générer de fenêtre MS-DOS, comme je vous l'ai dit dans ma toute première réponse, il suffit d'utiliser le lanceur javaw.exe au lieu de java.exe. Il y a alors plusieurs alternatives.
Il n'est pas impératif de produire un jar exécutable pour exploiter javaw.exe, ce dernier peut très bien lancer un fichier .class, par contre, avec un jar exécutable, c'est toujours plus simple et propre.
Quoi qu'il en soit, en premier lieu, il faut contrôler le path de votre système. javaw.exe est un programme Windows, pour le lancer sans préciser le chemin complet qui permet d'y accéder, il faut s'assurer que la variable d'environnement path de votre windows pointe bien vers le dossier bin de votre jre, ou tout simplement ouvrir une fenêtre MS-DOS et taper "java -version", si vous avez une réponse, c'est Ok, sinon, c'est qu'il faut compléter la définition du path de votre Windows. C'est impératif pour les jre précédent la version 1.6. Depuis cette dernière, une copie de javaw.exe est faite dans l'arborescence système de windows "%windir%\system32\javaw.exe..." si bien qu'il n'y a plus à se préoccuper du path.
Une fois cette vérification faite, il ne reste plus qu'à créer un raccourcis sur le bureau de Windows. Dans le premier champ de saisie à renseigner lors de sa création, il suffira de taper quelque chose comme ça par exemple :
%windir%\system32\javaw.exe -cp . "NewJFrame"
NewJFrame représente ici le fichier de classe NewJFrame.class contenant la méthode main de l'application. Comme on définit dans cette ligne un classpath pour l'application java valant l'endroit où l'on se trouve, il ne faut pas oublier de renseigner le champ "Démarrer dans :" du raccourcis en y renseignant le chemin complet du dossier qui contient NewJFrame.class. Si votre application ne fait appel à aucune librairie additionnelle ou d'extension, ça lancera votre application sans générer la moindre fenêtre MS-DOS.
Si cela n'est pas trop indiscret, pourriez-vous nous faire part du contenu de ce batch de conversion ?