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

Langage Java Discussion :

Utilisation du Runtime


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Utilisation du Runtime
    Bonjour à tous!
    Je suis assez desesperée avec Runtime...
    Je veux executer depuis Java un programme en C que j'ai crée... Il consiste basiquement en:
    printf("Donnez le nom du fichier");
    Scanf("%s", nom_du_fichier);
    Après ça, le programme s'en charge de generer des documents en Latex. Mais rien d'autre est affiché sur la terminale...
    Je me suis mise avec le Runtime, et je suis arrivée a lire un programme basique de type: printf("HelloWorld")... Mais pas un executable comme celui que je veux faire...
    Je pense qu'il faudrait faire 2 thread, mais je suis completement perdue... Je vous laise le code que j'ai arrivé a faire. Je vous remercie vraiment beaucoup!
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    //CREATION DU FICHIER .BAT
    				try{
    				nom_bat=repertoire.concat(nom_du_composant);
    				nom_bat=nom_bat.concat(".bat");
    				System.out.println(""+nom_bat);
     
    				File file1=new File(nom_bat);
    				FileOutputStream file1Stream = new FileOutputStream(file1);
    				String[] adresse=new String[1];
    				adresse[0]="Executable_C.exe";
    				write(file1Stream,adresse);
    				}
    				catch(IOException ioe){
    					System.out.println("Could not write file");
    				}
     
    				//Envoi de l'instruction a l'executable C
    				System.out.println("Début du programme");
    				try{
    				String[] commande = {"cmd.exe","/C", nom_bat};
    				Process p=Runtime.getRuntime().exec(commande);
    	            AfficheurFlux fluxSortie = new AfficheurFlux(p.getInputStream());
    	            AfficheurFlux fluxErreur = new AfficheurFlux(p.getErrorStream());
     
    	            new Thread(fluxSortie).start();
    	            new Thread(fluxErreur).start();
    				p.waitFor();
    				}
    				catch(IOException e){
    					e.printStackTrace();
    				}
    				catch(InterruptedException e){
    					e.printStackTrace();
    				}
    				System.out.println("Fin du programme");
    }
    class AfficheurFlux implements Runnable {
     
    		private final InputStream inputStream;
     
    	    AfficheurFlux(InputStream inputStream) {
    	        this.inputStream = inputStream;
    	    }
     
    	    private BufferedReader getBufferedReader(InputStream is) {
    	        return new BufferedReader(new InputStreamReader(is));
    	    }
     
    	    @Override
    	    public void run() {
    	        BufferedReader br = getBufferedReader(inputStream);
    	        String ligne = "";
    	        try {
    	            while ((ligne = br.readLine()) != null) {
    	                System.out.println(ligne);
    	            }
    	        } catch (IOException e) {
    	            e.printStackTrace();
    	        }
    	    }
    	}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu trouveras un exemple complet ici (Notes en particulier l'appel de close() sur les flux, qu'il manque dans ton code) :

    http://ydisanto.developpez.com/tutor.../runtime-exec/

    Regardes également ici (Tu verras que l'exemple à la fin avec le ProcessConsumer est beaucoup plus simple que d'utiliser Runtime et des threads) :

    http://blog.developpez.com/adiguba/p...es_plus_simple
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Links
    J'avais déjà vus ces pages... Il ne m'avaient pas solutioné mon problème...

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Et quel est ce problème au juste ? Parce que c'est deux liens donnent les 2 sortes de solutions pour implémenter l'exécution de programmes externes.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Si tu regardes bien, ils travaillent jamais avec un executable qui contient des sorties et des entrees... J'ai vu plein d'exemples sur le net, qui travaillent avec des fichiers txt, ou que basiquement se concentrent a lire un entree...
    Cet exemple en particulier, est assez bien, mais ne traite pas les entrées...
    http://labs.excilys.com/2012/06/26/r...rocessbuilder/
    Bref, même si le code que j'utilise avec Runtime vient de toutes ces pages, il bloque...

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton problème, c'est que tu exécute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] commande = {"cmd.exe","/C", nom_bat};
    Donc tu demande à windows d'ouvrir un console et d'y exécuter la commande. Comme une console a été ouverte, les entrées / sortie de la commande passent dans cette console, pas dans les input/ouput que tu récupère en java.

    Pour faire simple, toi tu récupère les input / ouput de cmd.exe, c'est à dire un endroit où il ne se passe rien
    et cmd.exe ouvre une console qui gère les input/output de nom_bat

    Est-ce qu'on peut lancer un .bat sans ouvrir un console cmd? J'ai l'impression que ce n'est pas possible, malheureusement. Le .bat est il obligatoire?

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    C'est très commplique tout ça! Moi je veux juste envoyer a mon programme en C un String depuis java. C'est tout. C'est comme ça qu'il se passe dans le programme C:

    Printf("Donnez le nom du composant");
    Scanf("%s",nom_du_composant); C'est ici que je veux que java lui envoi le nom du fichier...

    Des idees?

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    D'accord, mais si c'est juste un programme écrit en C pourquoi tu ajoute une surcouche en le mettant dans une .bat et en exécutant ce .bat avec cmd.exe. Retire tout ça et met directement le nom de ton programme C dans le exec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] commande = {"chemin/vers/ton.exe"};

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Parce que cela m'envoi erreur sur la console...

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu pourrais être plus précis? Code finalement utilise et message complet? Java n'écris jamais "erreur" tout seul.

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Desolée ^^ ... J'avais tenté de le faire comme tu ma dis (sans le fichier .bat). Il m'apraisait un erreur sur la console, que je même pas cherchais a résoudre parce que je suis déjà à mon 3ème jour avec ça...
    Par contre, j'ai reussi à faire fonctioner le runtime avec mon programme (avec le fichier .bat)!!!!!

    Avec un seul souci, il m'arche seulement dans le repertoire:
    C:\Users\Gemma et laura\workspace\Projet
    Qui correspond précisement là où il y a fichiers eclipse de mon programme java... J'ai essaie tous les repertoires de mon ordi, et l'unique qui marche c'est précisement celui-là...
    Tu a une idee?

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    t'as écris "tonprogramme.exe" plutot que "chemine\vers\ton\programme.exe"


    mais franchement, il n'y a aucune raison de passer par in bat si il ne contient qu'un seul appel.

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    oui, parce que si j'enregistre le .bat dans un repertoir X, après il part de cet repertoir pour chercher l'executable... J'ai essaie d'ecrire tout le nom du repertoire en entiere, et c'etait l'erreur parce qu'il faissait:
    C:\Users\Gemma et laura\workspace\C:\Users\Gemma et laura\workspace\Projet>Executable_C.exe
    Et donc j'ai decide d'enregistrer le bat et l'executable dans le meme repertoire...
    J'ai peux essaier sans la cmd et t'envoyer les erreurs qu'il m'emvoie la console, si tu veux bien...

Discussions similaires

  1. [AC-2003] Utilisation du runtime?
    Par le méruvien dans le forum Runtime
    Réponses: 1
    Dernier message: 29/04/2012, 17h09
  2. [AC-2007] Export d'Access vers Excel en utilisant Access Runtime 2007
    Par Humanisto dans le forum Runtime
    Réponses: 36
    Dernier message: 28/10/2011, 00h31
  3. Utilisation de Runtime.getRuntime().exec();
    Par tutur50000 dans le forum Langage
    Réponses: 8
    Dernier message: 08/07/2010, 16h50
  4. [AC-2007] exclusivité d'utilisation avec Runtime
    Par Imitator92 dans le forum Runtime
    Réponses: 1
    Dernier message: 21/08/2009, 12h33
  5. Utilisation du runtime Access 2003
    Par Richard_35 dans le forum Runtime
    Réponses: 4
    Dernier message: 07/08/2008, 10h50

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