创建显示错误和输出的Java编译器

时间:2014-06-14 03:36:18

标签: java compiler-construction

我试图创建一个程序来编译放入文本区域代码的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());
    }
}

});

1 个答案:

答案 0 :(得分:0)

进程同时运行,因此除非您waitFor()完成,否则您不会有任何输出,否则您的输出不完整。那,并没有你认为它做的事情:

output.setText(compile.getErrorStream().toString());

toString()上的

InputStream耗尽流以生成字符串字符串;它可能只是Object.toString()