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

API standards et tierces Java Discussion :

faire tourner une commande dos sous application java


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut faire tourner une commande dos sous application java
    Bonsoir à tous,

    je souhaite compiler un fichier .java avec javac dans mon application(comme sous dos), comment faire?

    MERCI

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 120
    Points : 124
    Points
    124
    Par défaut
    Salut,

    tu peux utilisé la méthode exec de la classe Runtime.

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    ok, merci,

    je vais tester

  4. #4
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Je viens de tester avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process proc = Runtime.getRuntime().exec(exe);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    où exe=
     
    javac -classpath "C:\Applications\messages.jar;C:\Applications\projet.jar" Monfichier.java 2>erreur.log
    Mais ca ne fait rien. Je ne vois meme pas mon fichier erreur.log.

    Merci pour votre aide futur.

    PS: je fichier erreur.log va bien se mettre ds le meme repectoire que monfichier.java?

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Terminator
    PS: je fichier erreur.log va bien se mettre ds le meme repectoire que monfichier.java?
    Normalement, non...
    Il va se mettre dans le répertoire courant.
    Reste à savoir quel est ton répertoire courant.

    Pareil pour ton fichier java, si il n'est pas dans le répertoire courant, ça ne marchera pas.

    Donc soit tu t'assures d'être dans le bon répertoire quand tu lances ta commande, soit tu donnes les chemins complets...

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    ahhh ok,
    Mais ds mon programme( graphique) , lorsque je sauve qlq chose, il se met dans le dossier du programme en question!!

    Comment ca se fait?

    De plus, pour récuperer le dossier courant, comment faire?

    MERCI DE TON AIDE

  7. #7
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Terminator
    ahhh ok,
    Mais ds mon programme( graphique) , lorsque je sauve qlq chose, il se met dans le dossier du programme en question!!

    Comment ca se fait?
    Ben alors c'est bon, le répertoire courant est celui de ton appli.
    Ton fichier java est dans le même répertoire? Si oui, ça devrait être bon.
    Reste à savoir si ta commande fait bien ce qu'elle devrait...

    Citation Envoyé par Terminator
    De plus, pour récuperer le dossier courant, comment faire?
    Euh... comme ça, à froid, tu crées un objet File en donnant juste le nom du fichier au constructeur, et tu récupères le chemin avec getAbsolutePath()...




  8. #8
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    ok, le repectoire courant j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String repectoireApplication=System.getProperty("user.dir")+"\\";
    et ca marche tres bien (j'ai vérifié via un system.out.print(rectoireApplication)

    Mais voila, ca ne fair tjrs rien, je ne vois pas mon err.log?!

    Mais je me demande comment faire, quelle est la ligne de commande exacte à taper??

    j'ai mis ca:

    javac -classpath "C:\Applications\messages.jar;C:\Applications\projet.jar" c:\Monappli\Monfichier.java 2>c:\Monappli\
    erreur.log

    Mais est-ce ainsi?

    MERCI

    EDIT: au fait, c'est via ce forum qu'on m'a dit que pour lancer une ligne de commande (au fait, je veux compiler un fichier java et mettre ces erreurs dans un fichiers log que je pourrait utiliser). Donc on m'a dit de mettre:

    Process proc = Runtime.getRuntime().exec(exe);

    où exe est ce que j'ai mis au dessus.

    EDIT2: je me demande su l'erreur de vient pas du process???!!!
    Je vais poster un truc pour confirmer ca!!

  9. #9
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Fais attention dans la définition de ta variable exe, avec les \ et les "... tapé comme ça, ça ne passera pas...

    Ensuite, il faut faire attention avec les commandes paramétrées... il y a plusieurs manières de lancer la méthode exec()...

    Et finalement, je sens que tu ne peux pas utiliser la redirection des flux de cette manière avec exec(). Il va falloir utiliser getErrorStream() de la classe Process d'après moi. Mais bon, je ne maitrise pas trop la choses en détail...

    Et ne pas mettre le chemin vers le fichier java, sinon le compilo va considérer ça comme un package...

  10. #10
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    ok, merci pour tes reponses.

    Je vais chercher de mon coté.

    N'hésitez pas à me donner des indices...Tout est le bienvenue

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

    Citation Envoyé par Terminator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -classpath "C:\Applications\messages.jar;C:\Applications\projet.jar" Monfichier.java 2>erreur.log
    Mais ca ne fait rien. Je ne vois meme pas mon fichier erreur.log.
    C'est normal puisque les redirection ne fonctionne pas comme cela : c'est le shell du système qui les gère, mais pas la classe Runtime...

    Ici 2>erreur.log est passé à javac comme un simple paramètre, qui sera interprété comme un nom de fichier...


    Pour récupérer la sortie du programme (stdout et stderr), tu dois utiliser les méthode getInputStream() et getErrorStream() de ton Process...

    Tu trouveras plus de détail dans ce message : http://www.developpez.net/forums/sho...835#post633835

    a++

  12. #12
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut Autre problème Dos
    Salut,
    ben moi aussi j'ai des poblèmes avec des comandes dos,
    Par exemple je voudrai imprimer un fichier texte que j'ai préalablement écrit, je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process printProcces = Runtime.getRuntime().exec("print tmp.txt");
    avec tmp.txt un fichier à imprimer, situé dans le répertoire courant (ie le répertoire où se trouve ce programme java)

    Mais ça ne fonctionne pas, ni avec print, ni essayer de le supprimer avec un simple del...
    Enfin voilà, problème...

  13. #13
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Razgriz
    Mais ça ne fonctionne pas, ni avec print, ni essayer de le supprimer avec un simple del...
    exec() ne fonctionne que pour lancer des programmes, par pour lancer des commandes de cmd.exe....
    Je sais, c'est subtil, mais il faut savoir ce que l'on fait... del n'est pas un programme windows, c'est une commande de la fenêtre de... commandes!

    Si tu veux lancer tes commandes, il faut le faire au sein de cmd.exe, pas brut de fonderie comme tu le fais.

    Va voir ce post: http://www.developpez.net/forums/sho...d.php?t=133885
    , j'y ai mis un peu de code qui permet de récupérer les messages d'erreur en prime, comme ça tu sauras ce qui plante.

    Au passage, pour supprimer un fichier, il existe une commande dans l'API Java, pas la peine de lancer un programme externe pour ça...

  14. #14
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    ouais y a des méthodes dans a classe File pour supprimer des fichiers, mais ça fonctionne pas tjrs, aussi bien deleteOnExit() que delete...

    Sinon y a pas moyen d'entrer de simples commandes Dos comme del, print, copy,... ?
    Posséder un outil d'impression me serait vachement utile...
    Mais si y a moyen de se passer des commandes dos pour ça, je suis tout ouï...

  15. #15
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Razgriz
    ouais y a des méthodes dans a classe File pour supprimer des fichiers, mais ça fonctionne pas tjrs
    Ouarf... va falloir le dire aux gars de chez Sun que leurs méthodes ne marchent "pas toujours"!!!


    Citation Envoyé par Razgriz
    Sinon y a pas moyen d'entrer de simples commandes Dos comme del, print, copy,... ?
    Je viens de m'apercevoir que tous comptes faits, et malgré ce que j'ai dit, ça marche très bien de les appeler directement... (enfin, chez moi...)

    Prends le script que j'ai mis dans l'autre post (celui dont je t'ai donné le lien), remplace éventuellement le "getErrorStream" par un "getInputStream", et regarde l'erreur que tu obtiens.

  16. #16
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    ouais ben ça marche pas ..... Beuheuheuuuu,
    enfin soit, on va pas pleure non plus lol
    Voici un copier coller du 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
    34
    35
    36
    37
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class Essai
    {
     
     
        public static void main(String[] args) 
        {
     
            String exe="del N:/Java/Autre/Tests/Cmd Dos/tmp.txt";
     
            try 
            {
            Process proc=Runtime.getRuntime().exec(exe);
     
            InputStream stdout=proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stdout);
            BufferedReader br = new BufferedReader(isr);
     
            int exitVal = proc.waitFor();
     
            System.out.println("Valeur de sortie: " + exitVal);
     
            String line=null;
            while ( (line = br.readLine()) != null)
                System.out.println("  >" + line);    
     
            } 
        catch (Exception e) 
            {
            e.printStackTrace();
            }
        }
    }
    Et voilà le message d'erreur. Le fichier tmp.txt se trouve bien dans le répertoire : N:/Java/Autre/Tests/Cmd Dos/tmp.txt
    Alors qu'est-ce qui ne va pas???
    J'ai essayé sans le path, avec juste le path qu'il faut au lancement de la console (elle démarre dans N:/Java, je mets donc Autre/... ), mais ça marche pas non plus... Heeeelp..............

    N:\Java\Autre\Tests\Cmd Dos>java Essai
    java.io.IOException: CreateProcess: del N:/Java/Autre/Tests/Cmd Dos/tmp.txt error=2
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at Essai.main(Essai.java:16)

  17. #17
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Desfois ça marche, desfois non...

    Cette fois, c'était ça qu'il fallait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String exe="cmd.exe /C del N:\\Java\\Autre\\Tests\\Cmd Dos\\tmp.txt";

    (à l'avenir, si je dis un truc, puis un second en disant que le premier n'est pas bon, et que finalement le second ne marche pas, il faut aller essayer le premier... )

  18. #18
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    ahum, je suis au regret d'annoncer que ça ne foncuionne pas, quand j'essaie avec ladite commande lol, il me mets : valeur de sortie : 1, le fichier spécifié est introuvable, or il se trouve bel et bien au bon endraoit, sous le nom correct...

    grrr

  19. #19
    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,


    Tu n'as pas de quote autour du nom du fichier, or celui-ci contient un espace...

    Mais pourquoi faire aussi compliqué pour supprimer un fichier ???? Pourquoi ne pas utiliser la méthode delete() de la classe File ????


    a++

  20. #20
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par adiGuba
    Tu n'as pas de quote autour du nom du fichier, or celui-ci contient un espace...
    Mea culpa... j'avais fait les tests avec mon fichier à moi, sans espace... j'aurais dû tiquer en faisant le copier/coller...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Exécuter une commande DOS
    Par Bourak dans le forum Delphi
    Réponses: 9
    Dernier message: 02/08/2016, 12h15
  2. récupérer les résultats d'une commande dos sous matlab
    Par Christinita dans le forum MATLAB
    Réponses: 6
    Dernier message: 22/04/2012, 16h11
  3. Réponses: 0
    Dernier message: 16/04/2009, 16h35
  4. Excécuter une commande Dos sous Java
    Par mina86 dans le forum Général Java
    Réponses: 2
    Dernier message: 31/05/2008, 13h01
  5. [PowerBuilder] Executer une commande DOS sous PB
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 09/08/2006, 16h54

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