我正在通過Java編寫一個C語言評估程序,該程序針對C語言提供了大量編程問題,它允許用戶以C代碼的形式輸入答案,並且然後按下「編譯」按鈕,該按鈕鏈接到通過gcc運行用戶輸入代碼的bat文件。將gcc編譯狀態保存爲Java的文本文件
我已經得到了輸入和編譯工作,但我需要從編譯器獲得輸出,並得到它在程序中打印textarea。我可以得到一個簡單的「Hello,world」編譯,但是我無法獲得需要使用scanf的用戶輸入的程序,例如打印。
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);
}
}
這是「編譯」按鈕actionPerformed方法,所述compileCode()是一個顯示輸出和「編譯」是輸出的TEXTAREA JFrame中。
我的批處理文件是:
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
我不知道我怎麼能做到這一點,所以對於代碼的輸出創建框架,如果代碼需要用戶輸入的命令提示符沒有按不向「.exec()」添加「開始」即可打開,但在程序運行完畢之前會顯示框架。
此外,如果編譯因錯誤而失敗,我將如何獲得編譯器的輸出?目前我在批處理文件中獲取它的方式在文本文件失敗時不會放入任何文本文件。
將文本文件內容保存到一個數組,然後將其打印在textarea工作? – JohnBore 2010-05-16 00:42:14