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 :

Affichage dans une fenètre dos


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut Affichage dans une fenètre dos
    Bonjour,
    j'ai un souci par rapport à l'affichage d'un résultat dans une fenêtre DOS.
    Voila le but du travail que je dois faire est de développer une interface Java qui, lorsqu'on lance la simulation, fait exécuter un programme .exe écrit en Fortran.

    Lorsque je lance la simulation la fenêtre dos dans laquelle s'exécute l'exe s'affiche correctement seulement voila pour que la simulation se lance il faut saisir dans la fenêtre dos le nom de la simulation souhaitée (qui correspond à un fichier .dat).
    Ce que je souhaite faire c'est automatisée cela, c'est à dire que la saisie d'un fichier se fasse automatiquement, que l'utilisateur n'ai pas à le faire à chaque fois.
    Pour cela j'ai écrit le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String cmd3 ="cmd /c cmd.exe /k \"cd c:\\"+Constantes.adresse2+"&&truc.exe < learn.data\"";
     
     Runtime r2 = Runtime.getRuntime(); 
    p2= r2.exec(cmd3);
    remarque:
    -p2 correspond à un objet Process
    -learn.data est un fichier dans lequel est écrit le nom de la simulation qui doit être saisie dans le dos de truc.exe pour que la simulation se lance

    En espérant que vous avez compris mon problème et que vous avez des réponses à m'apportez je vous remercie d'avance

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 691
    Par défaut
    Je penses que dans ton cas il vaut mieux utiliser ProcessBuilder et alimenter directement le flux d'entrée depuis l'application Java. Tu peux ainsi te passer totalement de la consolle DOS.

    Ca devrait donner quelquechose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      // démarre l'application depuis son répertoire
      ProcessBuilder pb = new ProcessBuilder("truc.exe");
      pb.directory(new File("c:\\"+Constantes.adresse2));
      Process p = pb.start();
     
      // envoie le fichier a l'entrée standard du process
      FileInputStream fis = new FileInputStream(new File("c:\\"+Constantes.adresse2+"\\learn.data"));
      byte[] buffer = new byte[1024];
      while (fis.read(buffer)==1024) { p.getOutputStream().write(buffer); }
    Si ton programme écrit sur les flux de sortie standard et d'erreur standard, il faudra également les lire.
    La technique serait exactement l'inverse que pour écrire dans l'entrée standard. Cependant, il faudrait probablement faire ça dans des threads séparés, s'il faut gérer les flux en paralèle.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    Cela ne fonctionne pas, j'ai mis le code que tu m'as suggéré mais le compilateur m'affiche le message d'érreur suivant:

    java.io.IOException: Cannot run program "min3p.exe" (in directory "c:\MIN3P"): CreateProcess error=2, Le fichier spécifié est introuvable
    at java.lang.ProcessBuilder.start(Unknown Source)
    Pourtant je me suis bien assuré que le chemin d'accès est bien le bon (c'est le même chemin que le premier code que mis et qui fonctionne)

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 691
    Par défaut
    En effet il semblerait que contrairement à ce que je croyais, spécifier le répertoire d'exécution ne dispense pas de mettre le chemin vers l'exécutable en absolu.
    Utiliser ProcessBuilder pb = new ProcessBuilder("c:\\"+Constantes.adresse2+"\\truc.exe"); devrait résoudre le problème.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    Je viens de faire les changements que tu m'as indiqué, ce qui me donne pour résumé le code suivant:

    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
     
    // démarre l'application depuis son répertoire
     ProcessBuilder pb = new ProcessBuilder("c:\\"+Constantes.adresse2+"\\min3p.exe");
     pb.directory(new File("c:\\"+Constantes.adresse2));
     
    try {
    		  p = pb.start();
     
    		 // envoie le fichier a l'entrée standard du process
    		FileInputStream fis = new FileInputStream(new File("c:\\"+Constantes.adresse2+"\\learn.data"));
     
    		byte[] buffer = new byte[1024];
    	while (fis.read(buffer)==1024) { p.getOutputStream().write(buffer); }
     
    			} catch (IOException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    Cette fois aucun message d'erreur ne s'affiche mais la fenêtre DOS ne s'affiche pas non plus

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 691
    Par défaut
    Si ton programme écrit sur les flux de sortie standard et d'erreur standard, il faudra également les lire.

    La technique serait exactement l'inverse que pour écrire dans l'entrée standard. Cependant, il faudrait probablement faire ça dans des threads séparés, s'il faut gérer les flux en paralèle.

Discussions similaires

  1. Activation ou non d'une fonction d'affichage dans une fenêtre d'une image
    Par Aquarium33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/03/2012, 11h30
  2. Remplir paramètres dans une fenêtre DOS
    Par kouban dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/06/2011, 10h41
  3. Problème d'affichage dans une fenêtre hEdit
    Par piroman14 dans le forum Débuter
    Réponses: 3
    Dernier message: 04/07/2008, 15h29
  4. pb affichage dans une fenêtre
    Par Mat 74 dans le forum Windows
    Réponses: 8
    Dernier message: 27/11/2005, 23h14

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