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

Entrée/Sortie Java Discussion :

Problème dans execution de processus


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut Problème dans execution de processus
    Bonjour,

    Je créé une application qui génére du code java à partir de code XML. Je voudrais mettre dans mon menu une option "compiler et executer" qui dès que l'utilisateur choisi celui ci, l'application compile et excute le code java venant d'être généré.

    J'ai utilisé les processus dans cet ordre:
    - cd cheminDuRepertoire (ou se trouve le code java)
    - javac nomFichier.java
    - java Lanceur (car le main se trouve toujorus dans cette classe)

    Le chemin du repertoire peux changer tout le temps. Quand j'essais d'excuter mon code, il met une IOExecption pour la commande "cd". J'ai utilisé un processus différent à chaque fois. Est ce que quelqu'un aurai une idée de ce qui provoque cette exception (sachant que le chemin donné est correct et existe). Il faudrait que cette fonction marche sur Window, Unix, et MAC

    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
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    //	listener for "Compiler et executer" in the menu "Outils"
     
    	class ListenerCompile implements ActionListener {
     
    		public void actionPerformed( ActionEvent e ) {
     
    			String error = "";
     
    			String nameFile = "";
     
    			String chemin = "";
     
    			if( writePanel.getPathFileJava().equals( "" ) ) {
     
    				errorPanel.fctPrintError( "Erreur: Vous devez deja generer un fichier java" );
     
    				return;
     
    			}
     
    			try {
     
    				int index = writePanel.getPathFileJava().lastIndexOf( "/" );
     
    				chemin = writePanel.getPathFileJava().substring(0, index + 1 );
     
    				System.out.println( chemin );
     
    				nameFile = writePanel.getPathFileJava().substring(index + 1, writePanel.getPathFileJava().length() );
     
    				System.out.println( nameFile );
     
    				//Allez dans le repertoire
     
    				Process proc = Runtime.getRuntime().exec( "cd " + chemin );
     
    				try {
     
    					//lancement de la compilation
     
    					Process proc1 = Runtime.getRuntime().exec( "javac " + nameFile );
     
    					//pour recuperer le message
     
    					InputStream is_Error = proc1.getErrorStream();
     
    					index = is_Error.read();
     
    					if( index == -1 ) {
     
    						error = "Le fichier java est compile" + newline;
     
    						//execution
     
    						try {
     
    							//lancement de la compilation
     
    							Process proc2 = Runtime.getRuntime().exec("java Lanceur" );
     
    							//pour recuperer le message
     
    							is_Error= proc2.getErrorStream();
     
    							index = is_Error.read();
     
    							if( index == -1 ) {
     
    								error += "Le fichier java est execute";
     
    							}
     
    							else {
     
    								error = "Erreur a l'execution: ";
     
    								while( index != -1 ) {
     
    									error += (char)index;
     
    									index = is_Error.read();
     
    								}
     
    							}
     
    						}
     
    						catch( IOException IOe ) {
     
    							error = "Erreur: Impossible d'executer le fichier java";
     
    						}
     
    					}
     
    					else {
     
    						error = "Erreur a la compilation: ";
     
    						while( index != -1 ) {
     
    							error += (char)index;
     
    							index = is_Error.read();
     
    						}
     
    					}
     
    				}
     
    				catch( IOException IOe ) {
     
    					error = "Erreur: Impossible de compiler le fichier java";
     
    				}
     
    			}
     
    			catch( IOException IOe ) {
     
    				error = "Erreur: Impossible d'accÈder au fichier";
     
    			}
     
    			errorPanel.fctPrintError( error );
     
    		}
     
    	}
    Merci de votre aide

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Salut,

    exec permet de lancer un programme, or "cd" n'est pas un programme mais une commande du shell système.

    Le mieux serait encore pour toi, soit de générer un fichier script à lancer (mais ça sera en fonction du système utilisé, bat sous windows, sh sous linux) en mettant dedans la suite de commandes à lancer, soit d'utiliser les flags des commandes javac et java pour préciser où se trouvent les sources et les classes (flag -sourcepath de javac si nécessaire, et -classpath de java) ce qui permet de se passer de l'appel à "cd". Ca sera aussi simple.

    Pour javac, tu définis dans -sourcepath où se trouvent les sources nécessaires à la compilation, et tu appelles javac en donnant le chemin complet vers la main classe.
    Pour java, tu indiques le classpath, et tu appelles java en donnant le nom de la main classe (et surtout pas le chemin complet!)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    J'ai essayer d'appliquer la deuxieme solution que vous m'avez proposé. Il est vrai que je prefere eviter de créé des bat et tout cela.

    Le resultat de ce changement : La compilation se fait sans problème (je trouve bien les .class dans le repertoire). Par contre il y a encore un problème au point de vue de l'execution. J'ai un message qui s'affiche disant que l'excution c'est bien passé, sauf que la fenetre (car le XMl sert à créé des interfaces graphique) ne s'affiche pas à l'ecran.

    voici mon code modifié:
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    //	listener for "Compiler et executer" in the menu "Outils"
     
    	class ListenerCompile implements ActionListener {
     
    		public void actionPerformed( ActionEvent e ) {
     
    			String error = "";
     
    			String nameFile = "";
     
    			String chemin = "";
     
    			if( writePanel.getPathFileJava().equals( "" ) ) {
     
    				errorPanel.fctPrintError( "Erreur: Vous devez deja generer un fichier java" );
     
    				return;
     
    			}
     
    			try {
     
    				//COMPILATION
     
    				int index = writePanel.getPathFileJava().lastIndexOf( "/" );
     
    				chemin = writePanel.getPathFileJava().substring(0, index + 1 );
     
    				System.out.println( chemin );
     
    				nameFile = writePanel.getPathFileJava().substring(index + 1, writePanel.getPathFileJava().length() );
     
    				System.out.println( nameFile );
     
    				//lancement de la compilation
     
    				Process proc1 = Runtime.getRuntime().exec( "javac " + chemin + nameFile );
     
    				//pour recuperer le message
     
    				InputStream is_Error = proc1.getErrorStream();
     
    				index = is_Error.read();
     
    				if( index == -1 ) {
     
    					//EXECUTION
     
    					try {
     
    						//lancement de la compilation
     
    						Process proc2 = Runtime.getRuntime().exec("java -classpath "+ chemin + "Lanceur" );
     
    						//pour recuperer le message
     
    						is_Error= proc2.getErrorStream();
     
    						index = is_Error.read();
     
    						if( index != -1 ) {
     
    							error = "Erreur a l'execution: ";
     
    							while( index != -1 ) {
     
    								error += (char)index;
     
    								index = is_Error.read();
     
    							}
     
    							errorPanel.fctPrintError( error );
     
    						}
     
    						else {
     
    							errorPanel.fctPrintError( "Le fichier est compile et execute" );
     
    						}
     
    					}
     
    					catch( IOException IOe ) {
     
    						errorPanel.fctPrintError( "Erreur: Impossible d'executer le fichier java" );
     
    					}
     
    				}
     
    				else {
     
    					error = "Erreur a la compilation: ";
     
    					while( index != -1 ) {
     
    						error += (char)index;
     
    						index = is_Error.read();
     
    					}
     
    					errorPanel.fctPrintError( error );
     
    				}
     
    			}
     
    			catch( IOException IOe ) {
     
    				errorPanel.fctPrintError( "Erreur: Impossible de compiler le fichier java" );
     
    			}
     
    		}
     
    	}

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Citation Envoyé par Edta
    Par contre il y a encore un problème au point de vue de l'execution. J'ai un message qui s'affiche disant que l'excution c'est bien passé, sauf que la fenetre (car le XMl sert à créé des interfaces graphique) ne s'affiche pas à l'ecran.
    Dans ce cas, il y a peut-être un soucis dans le code généré avec ton xml...

    As-tu essayé de lancé directement le fichier compilé?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    oui, j'ai deja essayer.

    Si dans un shell , je me deplace dans mon repertoire que je compile et que j'execute j'ai bien se qu'il faut. Cela ne vient pas du code mais bien de l'ecriture de mon actioner.

    Quand j'essayer de compiler à partir d'un autre endroit que mon repertoire, j'ai ici un probleme, j'ai une mauvaise ecriture de la commande 'java". le probleme vient surement de la.

    par exemple si je fait
    home> javac Documents/Projet/boutons.java //comple sans probleme
    home> java Documents/Projet/Lanceur // il me dit que la commande n'existe pas
    J'ai essayer plusieurs solutions sans succes....

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Citation Envoyé par Edta
    Si dans un shell , je me deplace dans mon repertoire que je compile et que j'execute j'ai bien se qu'il faut. Cela ne vient pas du code mais bien de l'ecriture de mon actioner.
    Dans ce cas, au lieu de ne rien faire du flux d'erreur, essaye d'afficher ce qu'il te sort.
    Encore mieux, récupères déjà l'InputStream du process, et affiche ce qu'il écrit. J'ai un léger doute sur ta commande "java". Surtout que tu compiles un fichier "namefile", et que tu lances une classe "Lanceur". A mon avis, ça doit planter là... déjà...


    Citation Envoyé par Edta
    Quand j'essayer de compiler à partir d'un autre endroit que mon repertoire, j'ai ici un probleme, j'ai une mauvaise ecriture de la commande 'java". le probleme vient surement de la.

    par exemple si je fait
    home> javac Documents/Projet/boutons.java //comple sans probleme
    home> java Documents/Projet/Lanceur // il me dit que la commande n'existe pas
    Tu compiles boutons.java, et tu lances Lanceur????


    Citation Envoyé par Edta
    J'ai essayer plusieurs solutions sans succes....
    Lesquelles?
    Et précise ton environnement de travail (système, logiciels, etc)


    Pour info, la manip marche très bien chez moi...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2008, 11h29
  2. Exécution de processus (format elf, a.out)
    Par b4u dans le forum Administration système
    Réponses: 2
    Dernier message: 19/03/2006, 17h59
  3. executer un processus a partir d'un programme source
    Par sofiane44 dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 08/01/2006, 14h20
  4. Inclure un DLL dans executable
    Par nico33410 dans le forum Langage
    Réponses: 9
    Dernier message: 01/09/2005, 15h17
  5. Contrôle d'exécution de processus
    Par TB38570 dans le forum Linux
    Réponses: 3
    Dernier message: 07/12/2004, 09h39

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