- PR -

Runtime#exec(String)について

1
投稿者投稿内容
sinh
ベテラン
会議室デビュー日: 2003/01/22
投稿数: 87
投稿日時: 2003-06-13 08:03
JavaのプログラムからRuntime#exec(String)を用いて, javac や java コマンドを呼び出して他のJavaソースをコンパイルしたり、実行したりしようとしています。そこで以下のようなソースでテキストエリアへjavacの出力を表示しようとしていますがうまくでません。

import java.io.*;
import javax.swing.*;

public class RuntimeSample extends JFrame{
public static void main(String[] args) throw Exception{
JPanel pane = (JPanel)getContentPane();
JTextArea area = new JTextArea(20,20);
pane.add(area);

String command = "javac.exe Other.java" // Other.java(他のソース)
Runtime run = Runtime.getRuntime();
Process pro = run.exec(command);
InputStreamReader isr = new InputStreamReader(pro.getInputStream());
BufferedReader br = new BufferedReader(isr);
area.read(br, null);

setVisible(true);
}
}

このソースで、Other.javaがエラーのないソースなら、コンパイルはされるのですがエラーが出るソースのときにエラー出力がテキストエリアに出力されないです。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-06-13 11:46
引用:

sinさんの書き込み (2003-06-13 08:03) より:
BufferedReader br = new BufferedReader(isr);
area.read(br, null);


こんにちはニシトミです、自分も昔このような感じなのを、作ったごとがあります。
ちょっとサンプルコードを拝借して実行してみましたが、上記の
area.read(br,null);
というとこが気になります、
APIによると、

read
public void read(Reader in,
Object desc)
throws IOExceptionストリームから初期化します。コンポーネントに適切なタイプのモデルを作成して、モデルをストリームから初期化します。デフォルトで、モデルをプレーンテキストでロードします。モデルのそれまでのコンテンツは破棄されます。
パラメータ:
in - 読み込み元のストリーム
desc - ストリームを記述するオブジェクト。String、File、URL など。ある種のドキュメント (たとえば HTML) は、この情報を利用できる場合がある。null 以外の場合、ドキュメントのプロパティとして追加される
例外:
IOException - 初期化に使われるストリームによってスローされる
関連項目:
EditorKit.createDefaultDocument(), setDocument(javax.swing.text.Document), PlainDocument

となっています、ですので、nullではなく他のオブジェクトを
渡してあげればよさそうな気がしますが、
確信がありません、ちょっと自分も試してみます。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-06-13 12:56
コンパイルエラーはProcess#getErrorStream()の方に出力されているんじゃないですか?
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-06-13 13:05
引用:

Wataさんの書き込み (2003-06-13 12:56) より:
コンパイルエラーはProcess#getErrorStream()の方に出力されているんじゃないですか?



失礼しましたそうみたいです、でまかせ言ってすみませんでした。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-06-13 15:27
何度も書いて申し訳ありません、
先程は、変なことをかいてしまったので名誉挽回で...
すでにご存知だとは思いますが、ストリームを取得し終わったら
必ずクローズするようにしましょう、finally節の中だと安全です、
今回の場合はBufferでラップしたあとかな

以上になります。
sinh
ベテラン
会議室デビュー日: 2003/01/22
投稿数: 87
投稿日時: 2003-06-16 21:09
遅くなりましたが、getErrorStream()を試してみたらうまく動きました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)