IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Lancement .bat d'une classe java et gestion des flux de la sortie standard.


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.
    Cordialement,

    David.

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Peut-être une piste
    Bonjour,

    Pour commencer, lancer une application java sans fenêtre DOS, il suffit d'invoquer l'exécutable javaw.exe au lieu de java.exe. Pour ce qui est de la fenêtre DOS, pourquoi voulez-vous récupérer ce qu'elle affiche ? puisqu'il s'agit là d'une fenêtre en stand-by de l'éxécution d'une instance de votre application si ce n'est des erreurs provoqué par votre application. Le langage java ne permettant quasiment pas de "compiler" sans lever les exception, vous avez tout le loisir de connaître vos messages d'erreur directement dans votre application sans aller la chercher dans la fenêtre DOS ?
    Sinon, pour écrire dans la chaîne message de votre JDialog à partir de votre inputstream, il vous suffit de l'encapsuler dans un BufferedReader afin d'y exploiter sa méthode ReadLine(), mais cela sous-entend de réaliser une écoute. Donc, une boucle qui va attendre qu'une ligne de texte finalisée par un retour chariot lui soit envoyé. La méthode readLine() renvoie un String qu'il suffit alors d'utiliser comme chaîne message du JDialog....
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut
    Merci pour ces réponses,

    Concernant le dos, initialement c'est un .bat qui est exécuter, mais il m'a été demander de faire une interface graphique, et pour éviter de réécrire tout le .bat j'ai utilisé un ProcessBuilder.

    pourquoi avoir écrit un .bat pour lancer le java? parce que la demande est de faire une interface graphique pour éviter de taper une ligne de commande, du coup a priori dans mon DOS je dois lancer "start java interface"..
    sinon je ne connaissait pas javaw.exe je vais faire des recherche dessus.

    Pour le second problème.. normalement mon proccessus lancer via ProcessBuilder permet de récupérer ce qui est affiche en retour de l’exécution du .bat, cette étape est réalisé je récupère bien les éléments dans un InputStream. Le problème c'est que sur mon interface graphique je ne veut pas la fenêtre dos, mais je veux bien un JDialog qui fasse défiler ce que devait afficher la fenêtre DOS.. en somme remplacer la fenêtre DOS par un JDialog, maintenant le setString ne passe sur mon Jlabel inclus dans mon Jdialog.. je ne sais pas si je dois faire comme ça mais en gros, je veux une fenêtre dynamique qui se substitue a la fenêtre du dos.
    Cordialement,

    David.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ta fenêtre DOS affiche exactement ce que tu lis via l'InputStream. Elle n'affiche que la sortie et l'erreur standard.
    Tu dis que tu récupères les données via l'InputStream, ton problème est-il d'écrire des données dans un JTextArea par exemple ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    @davly : Tu dois faire quoi exactement ?
    Parce que là tu sembles partir dans des trucs super-compliqué dont je ne comprend pas l'intérêt...

    a++

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut
    Oui exactement, et comme le traitement prend une dizaine de minutes, normalement la fenêtre DOS donne l'état d'avancement au fur et à mesure des étapes du script.
    donc oui récupérer ce texte et l'afficher de façon dynamique au fur et à mesure de l’exécution du script.
    Cordialement,

    David.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    @davly : Tu dois faire quoi exactement ?
    Parce que là tu sembles partir dans des trucs super-compliqué dont je ne comprend pas l'intérêt...

    a++
    Moi non plus je ne vois pas l’intérêt.. l'utilitaire en .bat fonctionne parfaitement, il suffit juste de lancer le .bat avec en argument ce qu'il faut, mais le client ne touche pas une bille en informatique, même avec une doc qui explique la seul commande à lancer, ils nous ont remonté la nécéssité d'avoir une interface graphique qui contient ni plus ni moins qu'un DirectoryChooser et FileChooser et un bouton "convertir".

    Pour éviter de refaire tout le .bat en java j'utilise un ProcessBuilder puis un InpuStream qui récupere bien ce qui aurait du être afficher dans la fenetre DOS.
    Cordialement,

    David.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par davly Voir le message
    Pour éviter de refaire tout le .bat en java j'utilise un ProcessBuilder puis un InpuStream qui récupere bien ce qui aurait du être afficher dans la fenetre DOS.
    Mais pourquoi ???
    Pourquoi ne pas faire une interface graphique en Swing ?

    a++

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Mais pourquoi ???
    Pourquoi ne pas faire une interface graphique en Swing ?

    a++
    L'interface est faite (cf PJ), le processbuilder est fait, la je voulais juste finaliser, en masquant la fenêtre DOS d'appel, et en affichant les retours du traitement.
    Images attachées Images attachées  
    Cordialement,

    David.

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Mais... Je comprend pas l'intérêt du ProcessBuilder ? Tu appelles un programme externe ???


    a++

  11. #11
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Je crois que des éclaircissement s'imposent. Pour que nous puissions comprendre, je penses que vous devriez nous décrire complètement votre problématique, en oubliant ce que vous avez déjà fait. De quoi partez vous, et vers quoi voulez-vous aller ?
    Sans ces précisions, je crois remarquer que tous les participants à cette discussion sont perdus...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Points : 86
    Points
    86
    Par défaut
    ok, repartons de zero .

    entrant :Script en .bat qui effectue une conversion de données.
    Utilisation de ce script: lancer une commande dos avec en argument le .bat un dossier source et une destination.

    transformation a effectuer : interface graphique tout beau en java qui masque ces fenêtre dos toute moche.

    réalisation effectuer à ce jour : une interface graphique qui permet tout le traitement, et qui appelle le .bat précédent viens un processbuilder.
    ne sachant pas lancer un java sur un environnement windows dépourvu des outils de dev, j'ai mis l'appel dans un .bat que je n'arrive pas à masquer.

    problématiques restantes:
    - je n'arrive pas à masquer ma première fenêtre dos,
    - la seconde fenêtre dos j'arrive a la masquer mais je n'arrives pas à récupérer les logs correctement (j'utilise InputStream ).
    - je voudrais pourvoir afficher ces logs dans un pop ups mais de manière dynamique, ce pop up remplacerai le retour des traitement du .bat, mais dans un pop up.

    Merci pour toute votre attention et toutes vos réponse jusqu'ici.
    Cordialement,

    David.

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par davly Voir le message
    - je n'arrive pas à masquer ma première fenêtre dos,
    Sous Windows il suffit de faire un jar executable. Le double-click lancera alors l'application (à condition de bien renseigner la Main-Class dans le manifest).

    Sinon il faut remplacer java à la place de javaw (w pour "window", c'est à dire le mode fenêtré de Windows).

    Citation Envoyé par davly Voir le message
    - la seconde fenêtre dos j'arrive a la masquer mais je n'arrives pas à récupérer les logs correctement (j'utilise InputStream ).
    Donc c'est deux problèmes complètement différents - ce n'était pas évident pour moi !!!

    Quel est le code et le problème exact ?


    a++

  14. #14
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut 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 ?
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/08/2009, 13h09
  2. Réponses: 3
    Dernier message: 09/04/2006, 13h04
  3. appel d'une class java en javascript ou autre
    Par tit_oune dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2006, 15h24
  4. [Tomcat]Executer une classe JAVA au demarrage de TOMCAT
    Par dehbi dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 18/08/2005, 14h23
  5. Réponses: 13
    Dernier message: 25/03/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo