Je crée un programme d'évaluation C via Java, qui contient un tas de questions de programmation pour C, et permet à l'utilisateur d'entrer une réponse sous forme de code C, et puis appuyez sur un bouton "Compiler", qui est lié à un fichier bat qui exécute le code d'entrée de l'utilisateur à travers gcc.Enregistrer le statut de compilation de gcc dans un fichier texte pour Java
J'ai l'entrée et la compilation fonctionnant, mais j'ai besoin d'obtenir la sortie du compilateur et obtenir cela pour imprimer des textarea dans le programme. Je peux obtenir une simple compilation "Hello, world", mais j'ai de la difficulté à imprimer des programmes nécessitant une entrée utilisateur avec scanf, par exemple.
else if(e.getSource().equals(compile)){
if(questionNumber<1){
JOptionPane.showMessageDialog(programFrame, "Please start the assessment", "Compile Error", JOptionPane.ERROR_MESSAGE);
}
else{
FileOutputStream fileWrite;
try {
fileWrite = new FileOutputStream("demo/demo.c");
new PrintStream(fileWrite).println(input.getText());//saves what the user has entered in to a C source file
fileWrite.close();
@SuppressWarnings("unused")
Process process = Runtime.getRuntime().exec("cmd /c compile.bat");//runs the batch file to compile the source file
compileCode();
try{
fileStream = new FileInputStream("demo/output.txt");
inputStream = new DataInputStream(fileStream);
bufferRead = new BufferedReader(new InputStreamReader(inputStream));
while((stringLine = bufferRead.readLine())!=null){
compiled.append(stringLine);
compiled.append("\n");
}
inputStream.close();
}
catch(IOException exc){
System.err.println("Unable to read file");
System.exit(-1);
}
}
catch (IOException exc) {
JOptionPane.showMessageDialog(programFrame, "Demo file not found", "File Error", JOptionPane.ERROR_MESSAGE);
}
}
Ceci est la méthode actionPerformed du bouton « Compiler », le compileCode() est l'DFrame qui affiche la sortie et « compilé » est la zone de texte pour la sortie.
Mon fichier batch est:
C:
cd dev-cpp\bin
gcc.exe H:\workspace\QuestionProgram\demo\demo.c -o demo > H:\workspace\QuestionProgram\demo\compilestatus.txt
demo > H:\workspace\QuestionProgram\demo\output.txt
Je ne sais pas comment je peux le faire, de sorte que le cadre est créé pour la sortie du code si le code nécessite une entrée utilisateur comme l'invite de commande doesn n'ouvrez pas sans ajouter "START" à .exec(), mais le cadre apparaît avant que le programme ne soit terminé.
De même, comment devrais-je obtenir la sortie du compilateur si la compilation échoue en raison d'une erreur? La façon dont je l'ai dans mon fichier batch pour le moment ne met rien dans un fichier texte s'il échoue.
Enregistrer le contenu du fichier texte dans un tableau, puis l'imprimer dans la zone de texte? – JohnBore