java程序调用javac编译获取编译结果信息
本帖最后由 feidewu 于 2012-11-17 11:36:26 编辑
Process process = null;
Runtime runtime = Runtime.getRuntime();
String str;
String string = null;
int num = 0;
try{
process = runtime.exec("javac "+fileName);
BufferedReader buff = new BufferedReader(new InputStreamReader(process.getInputStream()));
while((str = buff.readLine()) != null)
{
string += str;
}
errortextArea.setText(string+"hello");
}
catch(Exception e1){
e1.printStackTrace();
}
我在做一个简单的java编译器,调用javac编译求的出错信息。
代码如上,fileName是文件路径名,得到的string为null,为什么没有得到编译出错的信息?
[最优解释]
因为你的路径不一样,
给你举个例子,
比如我现在的路径是
eclispse
->bin
->src
->Compiler.java
->Target.java
你使用的是Compiler来执行exec编译Target.java的话
要这样写
runtime.exec("javac src/Target.java");
[其他解释]
你都知道是出错了,还用getInputStream,你说能获得信息吗?
请用getErrorStream
[其他解释]
java创建子进程执行并获取其标准输出流,用Runtime类来搞功能还是太弱了,建议你还是用native方法实现,暴露JNI接口给java调用,就是会变的不跨平台了
[其他解释]
从java6开始提供了javax.tools.JavaCompiler,为什么还使用Runtime调用javac
[其他解释]
使用StringBuilder
StringBuilder builder = new StringBuilder(1024);
循环里
builder.append(str);
[其他解释]
+= 连接字符串相对比较耗时
[其他解释]
同意楼上的,编译,执行需要加上包名
[其他解释]
怎么没人回复呢?会追加分数的。
[其他解释]
string没有被初始化,直接调用:string+=str,不报空指针?
[其他解释]
我把str初始化null后,还是没办法出现出错信息,string还是null
[其他解释]
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null, filename);
compiler.run这句根本不执行。为什么?我是从硬盘中打开某个java文件然后进行编译的
[其他解释]
使用getErrorStream
[其他解释]
String str = "";
String string = null;
Runtime run = Runtime.getRuntime();
errortextArea.setText(Name);
Process process = null;
try {
process = run.exec("java "+Name);
BufferedInputStream in = new BufferedInputStream(process.getErrorStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
errortextArea.setText(string);
while((str = reader.readLine()) != null)
{
string += str;
string += "\n";
}
errortextArea.setText(string);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
出来的结果是:找不到或无法加载主类 MyEditor2.java。为什么会这样呢?
[其他解释]
我配置的环境都没有错啊,因为我在控制台下编译运行都没有任何问题,但是用eclipse运行之后
得到的出错信息是:找不到或无法加载主类 MyEditor2.java。为什么?
[其他解释]
上一个回复我没说清楚,在我的程序的界面中读进一个java文件后调用javac编译得到的编译结果是:找不到或无法加载主类 MyEditor2.java
[其他解释]
就是这个原因了,谢谢了。