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

  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
    J'ai lu la FAQ à ce sujet mais je ne suis pas sure d'avoir tout bien compris
    http://eclipse.developpez.com/faq/?p...nt#exporterJar


    La structure de mon projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dossier Principal
        -->  .settings
        -->  appClientModule
               -->  layout
               -->  META-INF
        -->  build
               --> classes   
                     -->  layout
                     -->  META-INF
        -->  librairies 
              --> sources
              --> JAR
        --> Application

    Dans le répertoire appClientModule, il y a mes classes
    Dans le répertoire build, il y a mes classes compilées
    Dans le répertoire Application, il y a l'appli exportée en .JAR
    Dans le repertoire librairies, j'ai mis les bibliothèques externes

    => c'est le fichier MANIFEST.MF qui est dans le répertoire appClientModule/META-INF qu'il faut modifier ? il faut mettre quoi dedans exactement ?
    J'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: Main
    Class-Path: Shell.jar
    => ça ne fonctionne pas

    On ne peut pas mettre les lib .JAR dans le .JAR final ?

  8. #8
    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
    J'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: Main
    Class-Path: Shell.jar
    => ça ne fonctionne pas
    Dans ce cas il faut que le Shell.jar soit dans le même répertoire que ton jar principale...

    Et lances ton appli en ligne de commande (java -jar tonfichier.jar) pour voir les éventuels exceptions lors de l'exécution...

    Citation Envoyé par Emcy Voir le message
    On ne peut pas mettre les lib .JAR dans le .JAR final ?
    En standard non. C'est possible avec des ClassLoaders spécifiques comme FatJar mais cela ne s'adapte pas à tous les types de déploiements (comme JWS par exemple)

    a++

  9. #9
    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
    ok c'est bon ça marche merci.

    donc j'ai modifié la structure de mon projet comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dossier Principal
        -->  .settings
        -->  appClientModule
               -->  layout
               -->  META-INF
        -->  build
               --> classes   
                     -->  layout
                     -->  META-INF
        -->  libSources
        --> Application
            -->  libJAR
    => les sources des lib externes sont dans le dossier libSources et les JAR externes dans le dossier Application/libJAR (j'ai donc modifier le fihcier.MF) : c'est bien comme ça qu'il faut structurer mon projet ?

    Aussi peut-on stopper une commande DOS qui est en cours => la commande TFTP peut mettre plusieurs dizaine de seconde à se terminer si elle ne trouve pas la machine distante

  10. #10
    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
    finalement l'arborescence de mon projet n'est pas parfaite : si par exemple j'ai besoin d'un fichier externe => je le met donc dans le répertoire Application.

    Donc pour y accéder, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File fileSrc = new File("monFichier.txt");
    => le problème est que si je lance mon application depuis eclipse, ça ne fonctionne pas car l'application ira chercher le fichier dans le repertoire "Dossier Principal". Donc la solution serait de mettre toutes mes ressources dans le "Dossier Principal" mais ça fait fouillis je trouve...

  11. #11
    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)

  12. #12
    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