- - PR -
Runtime#exec(String)について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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-06-13 11:46
こんにちはニシトミです、自分も昔このような感じなのを、作ったごとがあります。 ちょっとサンプルコードを拝借して実行してみましたが、上記の 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ではなく他のオブジェクトを 渡してあげればよさそうな気がしますが、 確信がありません、ちょっと自分も試してみます。 | ||||
|
投稿日時: 2003-06-13 12:56
コンパイルエラーはProcess#getErrorStream()の方に出力されているんじゃないですか?
| ||||
|
投稿日時: 2003-06-13 13:05
失礼しましたそうみたいです、でまかせ言ってすみませんでした。 | ||||
|
投稿日時: 2003-06-13 15:27
何度も書いて申し訳ありません、
先程は、変なことをかいてしまったので名誉挽回で... すでにご存知だとは思いますが、ストリームを取得し終わったら 必ずクローズするようにしましょう、finally節の中だと安全です、 今回の場合はBufferでラップしたあとかな 以上になります。 | ||||
|
投稿日時: 2003-06-16 21:09
遅くなりましたが、getErrorStream()を試してみたらうまく動きました。ありがとうございました。
| ||||
1
