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 :

afficher le retour d'un objet Shell


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut afficher le retour d'un objet Shell
    Bonjour,

    Je lance des commandes DOS grace à un objet type Shell (com.developpez.adiguba.shell)
    => comment fait-on pour afficher dans une boite de dialogue type javax.swing.JOptionPane.showMessageDialog :
    - les messages d'erreur
    - le retour des commandes DOS executées (ce qui est afficher dans la console batch lorsqu'on lance une commande).

    voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				Shell shellobj = new Shell();
     
    				shellobj.command("arp -d *");
    				shellobj.command("tftp 192.168.1.1 put \"Mon Fichier.ini\"");

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Shell shellobj = new Shell();
     
    StringBuilder out = new StringBuilder();
    StringBuilder err = new StringBuilder();
     
    shellobj.command("arp -d *")
        .output(out).error(err).consume();
    Et à la fin de la commande les StringBuilders seront correctement renseigné

    Si tu as de grosses données que tu veux afficher au fur et à mesure, tu vas devoir implémenter ton propre "Appendable" pour y faire ce que tu veux...

    a++

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    merci ça fonctionne sous eclipse mais lorsque je lance mon JAR depuis windows, ça ne fonctionne plus => lorsque je clic sur le bouton pour lancer les commandes DOS, rien ne se passe

    Aussi, comment dois-je faire pour effacer les objets out et err une fois que je les ai lus ? je suis obligé des les detruire/reconstruire ?

    J'au aussi un problème d'affichage : certains caractères ne s'affichent pas correctement => a priori, il faut que je définisse le bon Charset pour l'objet shellobj mais je ne sais pas quoi mettre

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emcy Voir le message
    merci ça fonctionne sous eclipse mais lorsque je lance mon JAR depuis windows, ça ne fonctionne plus => lorsque je clic sur le bouton pour lancer les commandes DOS, rien ne se passe
    C'est à dire ??? Difficile de t'aider sans plus d'info...


    Citation Envoyé par Emcy Voir le message
    Aussi, comment dois-je faire pour effacer les objets out et err une fois que je les ai lus ? je suis obligé des les detruire/reconstruire ?
    Ce sont des objets tout à fait standard je ne vois pas le problème...

    Citation Envoyé par Emcy Voir le message
    J'au aussi un problème d'affichage : certains caractères ne s'affichent pas correctement
    Windows utilise deux encodages différents, dont un spécifique pour la console et hérité du MS-DOS. Tu dois utiliser ce dernier avec le shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shellobj.setCharset("cp850");
    Par contre le code exact du charset peut dépendre de la localisation de ton système (la commande chcp devrait te donner le bon code).


    a++

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Pour le problème du Charset ça fonctionne merci.
    Par contre je n'ai pas bien compris ce que tu voulais dire par utiliser la commande dhcp (l'application est executée en locale)...
    => sur un autre OS (ex:Windows Vista), ça fonctionne avec le même Charset ?

    Pour ce qui est de mon problème de lancement, voici mon code (rien de compliqué) qui est executé lorsque je clic sur un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    				StringBuilder out = new StringBuilder();
    				StringBuilder err = new StringBuilder();
     
     
    				Shell shellobj = new Shell();
    				shellobj.setCharset("cp850");
     
    				try {
    					shellobj.command("arp -d *").output(out).error(err).consume();
                                            shellobj.command("dir").output(out).error(err).consume();
     
    				} catch (IllegalStateException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
     
     
    				// affichage de tout ce qu'il s'est passé
    				javax.swing.JOptionPane.showMessageDialog(null, "sortie : " + out.toString());
    				javax.swing.JOptionPane.showMessageDialog(null, "erreur : " + err.toString());
    Sous eclipse, lorsque je compile, l'application est automatiquement executée => lorsque je clic sur le bouton les messages s'affichent
    Lorsque j'exporte mon programme en JAR et que je lance le JAR directement depuis windows XP, la fenetre s'ouvre bien mais lorsque je clic sur le bouton , rien ne se passe => tu as besoin d'autres infos ? lequelles ?
    => ça ne serait pas un problème que la lib n'est pas dans le JAR (lorsque j'ouvre mon JAR je ne vois pas la lib Shell) ?

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emcy Voir le message
    Pour le problème du Charset ça fonctionne merci.
    Par contre je n'ai pas bien compris ce que tu voulais dire par utiliser la commande dhcp (l'application est executée en locale)...
    => sur un autre OS (ex:Windows Vista), ça fonctionne avec le même Charset ?
    chcp est une commande console sous Windows qui indique le charset utilisé par la console (et qui n'est donc pas forcément du cp850 ).
    Aucune idée pour Windows Vista...


    Citation Envoyé par Emcy Voir le message
    Lorsque j'exporte mon programme en JAR et que je lance le JAR directement depuis windows XP, la fenetre s'ouvre bien mais lorsque je clic sur le bouton , rien ne se passe => tu as besoin d'autres infos ? lequelles ?
    => ça ne serait pas un problème que la lib n'est pas dans le JAR (lorsque j'ouvre mon JAR je ne vois pas la lib Shell) ?
    Le JAR ne doit pas être présent dans le JAR, mais "à coté" et spécifié dans le ClassPath de ton manifest...


    a++

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par Emcy Voir le message
    Aussi, comment dois-je faire pour effacer les objets out et err une fois que je les ai lus ? je suis obligé des les detruire/reconstruire ?
    => je n'arrive pas a afficher correctement dans ma console ce qui se passe

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    					str = "Lancement ...\r\n";
    					console.setParagraphAttributes(console.getLength(), str.length(), boldStyle, true);
    					console.insertString(0, str, boldStyle);
     
     
    					//*
    					str = "dir";
    					console.setParagraphAttributes(console.getLength(), str.length(), boldStyle, true);
    					console.insertString(console.getLength(), "> " + str + "\r\n", boldStyle);
    					shellobj.command(str).output(out).error(err).consume();				
    					console.setParagraphAttributes(console.getLength(), out.toString().length(), normalStyle, true);
    					console.insertString(console.getLength(), out.toString(), null);
    					console.setParagraphAttributes(console.getLength(), err.toString().length(), alerteStyle, true);
    					console.insertString(console.getLength(), err.toString(), alerteStyle);
     
    					str = "del toto.txt";
    					console.setParagraphAttributes(console.getLength(), str.length(), boldStyle, true);
    					console.insertString(console.getLength(), "> " + str + "\r\n", boldStyle);
    					shellobj.command(str).output(out).error(err).consume();				
    					console.setParagraphAttributes(console.getLength(), out.toString().length(), normalStyle, true);
    					console.insertString(console.getLength(), out.toString(), null);
    					console.setParagraphAttributes(console.getLength(), err.toString().length(), alerteStyle, true);
    					console.insertString(console.getLength(), err.toString(), alerteStyle);					
     
    					str = "dir";
    					console.setParagraphAttributes(console.getLength(), str.length(), boldStyle, true);
    					console.insertString(console.getLength(), "> " + str + "\r\n", boldStyle);
    					shellobj.command(str).output(out).error(err).consume();				
    					console.setParagraphAttributes(console.getLength(), out.toString().length(), normalStyle, true);
    					console.insertString(console.getLength(), out.toString(), null);
    					console.setParagraphAttributes(console.getLength(), err.toString().length(), alerteStyle, true);
    					console.insertString(console.getLength(), err.toString(), alerteStyle);
    					// */
    l'objet console est un JTextPane

    a chaque appel de .insertString, ça m'affiche tout ce qu'il s'est passé (je voudrais que ça m'affiche le rapport que de la dernière commande tapée)

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    up
    je n'ai toujours pas trouvé de solution

Discussions similaires

  1. [Débutant] [toString] afficher la valeur d'un objet java
    Par xman_genius dans le forum Langage
    Réponses: 1
    Dernier message: 30/05/2006, 20h28
  2. Afficher la reference d'un objet ???
    Par ThePhenom dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 10h27
  3. afficher un retour à la ligne via un include
    Par harlock59 dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2005, 14h31
  4. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  5. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07

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