如何获取自进程的错误输出,标准输出

dash_running 2006-08-23 09:39:40
是这样的:我用Runtime.exec("javac My.java"),Runtime.exec("java My")这样的形式来自动编译,执行另外一个java程序.

我是想把子进程运行过程中原来输出到控制台的信息输出到一个临时文件,这样就能对子进程的运行比较清楚,请问如何做?
...全文
326 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dash_running 2006-08-25
  • 打赏
  • 举报
回复
多谢!结了!
hemiao_1993 2006-08-24
  • 打赏
  • 举报
回复
这个问题挺有意思, 大概实现了一下, 基本功能实现了, 代码毛病肯定很多, 懒得优化了.
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;
import java.io.*;
import java.lang.Runtime;

public class MyReader {
JFrame frame = new JFrame("MyReader");
JTextArea textArea = new JTextArea();
Timer timer = new Timer();
public MyReader() throws IOException {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(textArea);

frame.setBounds(200, 200, 300, 300);
frame.setVisible(true);
Runtime.getRuntime().exec("javac MyWriter.java");
Process process = Runtime.getRuntime().exec("java MyWriter");
InputStream in = process.getInputStream();
final BufferedReader bfr = new BufferedReader(new InputStreamReader(in));
timer.schedule(new TimerTask(){

@Override
public void run() {
// TODO Auto-generated method stub
try {
textArea.append(bfr.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}, 0, 1000);
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
new MyReader();
}

}


public class MyWriter {

/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
int i = 0;
while(true) {
System.out.println("i = " + i++);
Thread.sleep(1000);
}
}

}
hemiao_1993 2006-08-24
  • 打赏
  • 举报
回复
可以设置一个Timer来轮询, 每隔几秒就去读事先约定好的文件, 可以把读和写操作都设置成带锁的来同步.
这应该是最简单的方法.
flyxxxxx 2006-08-23
  • 打赏
  • 举报
回复
Process p=Runtime.exec(...);
InputStream getErrorStream()
获得子进程的错误流。
InputStream getInputStream()
获得子进程的输入流。
OutputStream getOutputStream()
获得子进程的输出流
zhmt 2006-08-23
  • 打赏
  • 举报
回复
路过,友情up...
dash_running 2006-08-23
  • 打赏
  • 举报
回复
楼上,这个我也知道,能解释具体怎么用吗? 我的目标是要把子进程的输出(编译错误了之类的信息)输入到swing组件JTextArea里,相当于自己做了个控制台.

有人告诉我要得到子进程的输出流后输出到一个临时文件里,父进程再从这个临时文件里读子进程输出的信息然后打印到JTextArea里,但是这样感觉好多问题:

1.子进程把信息输出后如何通知父进程来读
2.如果子进程暂时没有输出,如何处理父进程?是让它忙等还是让它睡眠?如果是睡眠用什么命令,子进程又如何把它唤醒?
3.父进程和子进程如何同步,因为父子进程同时操作一个文件,总有个读写同步的问题吧.




62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧