我试图创建一个程序来编译放入文本区域代码的Java代码,然后运行它。我一直坚持输出错误消息以及将创建的文件运行到名为“输出”的JTextArea的结果。我希望它像eclipse或JCreator,其中编译器或运行时错误显示在'输出' area和System.out.println在'输出'中显示字符串。面积也是。现在当我输出运行文件的结果时,我在'输出中得到一条消息'文本区域,如java.io.FileInputStream@96e380c
任何帮助将不胜感激。以下是适用于' Run'的代码。按钮
btnRun.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// write non-lambda file
try {
nonLambda = new File("nonLambda.java");
BufferedWriter writer = new BufferedWriter(new FileWriter(nonLambda));
writer.write(nLambdaTA.getText());
writer.close();
} catch (Exception ex) {
ex.printStackTrace();
}
// compile non-lambda file
try {
Process compile = Runtime.getRuntime().exec("javac nonLambda.java");
output.setText(compile.getErrorStream().toString());
} catch(Exception e3) {
output.setText(e3.toString());
}
// run non-lambda file
try {
Process run = Runtime.getRuntime().exec("java -cp " +
nonLambda.getParent()+nonLambda.getName());
output.setText(run.getErrorStream().toString());
//output.append("\n"+run.getOutputStream().toString());
BufferedReader br = new BufferedReader(new InputStreamReader(run.getInputStream()));
String ch = new String();
while((ch=br.readLine())!=null)
output.append(ch+"\n");
} catch (Exception e4) {
output.append("\n" + e4.toString());
}
}
});
答案 0 :(得分:0)
进程同时运行,因此除非您waitFor()
完成,否则您不会有任何输出,否则您的输出不完整。那,并没有你认为它做的事情:
output.setText(compile.getErrorStream().toString());
toString()
上的 InputStream
会不耗尽流以生成字符串字符串;它可能只是Object.toString()
。