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 = "";