2013-04-30 5 views
0

Je souhaite compiler un texte de saisie et créer le fichier .exe à l'aide d'un bean géré et d'une page .xhtml. Cependant, la création du fichier est bien passé et la création d'.exe travail dosn't ici est le code managé de haricot:Exécution de la commande Cmd dans JSF

package Servlets; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
@ManagedBean(name = "fichier", eager = true) 
public class Fichier implements Serializable{ 
private String code; 
private String error; 




public String getCode() { 
    return code; 
} 

public String getError() { 
    return error; 
} 
public void setCode(String code) { 
    this.code = code; 
} 

public void setError(String error) { 
    this.error = error; 
} 



public void compile() throws IOException 
{ 


    File file = new File ("C:\\Users\\Rad1\\test.c"); 
    PrintWriter ecrivain; 
    ecrivain = new PrintWriter(new BufferedWriter (new FileWriter(file))); 
    ecrivain.println(code); 
      System.out.print("ecrivain"); 
    ecrivain.close(); 
    try { 
     Runtime runtime = Runtime.getRuntime(); 
     String[] cmd={"cmd.exe","/C gcc C:\\Users\\Rad1\\test.c -o C:\\Users\\Rad1\\test.exe"}; 
     Process p = runtime.exec(cmd,null,null); 
        System.out.print("boucle try"); 
      try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

      try { 

      String line=null; 

      while((line = reader.readLine()) != null) { 

       error =error+ line + "\n"; 
       } 
      } finally { 
       reader.close(); 
      } 
     } catch(IOException ioe) { 
      ioe.printStackTrace(); 

     } 


     } 
    catch (Exception e) {System.out.println("erreur d'execution"); } 




} 

}

+0

Pouvez-vous fournir les exceptions générées? Vérifiez le fichier ** catalina.out **. Cordialement. –

Répondre

0

Vous voulez probablement faire le «/C » un argument de séparé :

String[] cmd={"cmd.exe","/C", "gcc C:\\Users\\Rad1\\test.c -o C:\\Users\\Rad1\\test.exe"}; 

C'est la façon dont il est censé travailler, mais je suis sur linux, ne peut pas tester Cmd en ce moment.

Editer: pourquoi avez-vous les null supplémentaires sur le runtime.exec (cmd, null, null)?

+0

ne fonctionne pas! il crée toujours le fichier test.c et ne crée pas le .exe – Rad1

+0

cela a fonctionné quand je travaillais avec jsp et servlets et ce sont des arguments dont je n'ai pas besoin, j'ai juste besoin du nom cammande que je veux exécuter. – Rad1

+0

Pourquoi avez-vous besoin d'inclure la partie cmd, pourquoi ne lancez-vous pas simplement "gcc ...." – rolfl

Questions connexes