- - PR -
テキストエリアへのエラー文の出力
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-11-09 17:52
setTextがOKだった場合には、
Runtime#execで返されるProcessオブジェクトの waitForメソッドでコマンドの終了を待つ必要が あると思います。 | ||||
|
投稿日時: 2004-11-09 18:05
そもそもエラー出力を求めているのに process.getInputStream() を
使っている時点でアウトです。 process.getErrorStream() に書き換えてみてください。 それとtanaboさんの仰っているwaitFor() も必要かもしれませんね。 あとは、インギさんの仰っているsetText() が本当に狙い通りなのか も考えてみてください。 ループでまわしてsetText()するということは、前回のループ時に記述した 文字列を消して新たな文字列に書きかえるということです。 末尾に追加するならappend()を使うべきですね(改行処理も必要です) | ||||
|
投稿日時: 2004-11-09 18:21
Java 1.3 の頃だったかな…。NT系Windows で外部プロセスを起動すると止まってしまうという FAQ がありました。外部プロセスの標準出力、エラー出力の読み出しを行わないとバッファが詰まって外部プロセスの実行自体がブロックされてしまうのが原因でした。
・外部プロセスを起動したら、標準出力だけでなく標準エラー出力も吸い出してあげてください。(そもそも javac のエラーメッセージは、標準出力じゃなくて標準エラー出力に吐かれるんじゃないのかな?) とりあえず、外部プロセスのブロッキングを予防するために、次の 2点を守ってください。 ・標準出力, 標準エラー出力をスレッドを使用して非同期で読み出すこと。 ・読み出しには BufferedReader#readLine() を使わないこと。 それから、外部プロセスがブロッキングされていないことを確認するために、正しいソースコードを与えた場合に .class ファイルが出来上がることを確認してください。 | ||||
|
投稿日時: 2004-11-09 19:32
writeに与えられるbyte配列が完全な文字列であることを想定している怪しいコードですが、以前作ったTextPaneに文字を吐くPrintStreamです。
こんな感じのをSystem.setErrに喰わせてやればいけるんじゃないでしょうか。
| ||||
|
投稿日時: 2004-11-09 20:16
System#setErr(PrintStream err) とか言ってる人達は何か勘違いしていませんか?
自プロセスの標準エラー出力を切り替えても解決しないので注意 > 元質問者 | ||||
|
投稿日時: 2004-11-09 20:33
ぐは(確認中) 単にウィジェットにprintするという趣旨だと誤認していました。 | ||||
|
投稿日時: 2004-11-09 23:51
JavaFAQ : Java に関するよくある質問とその回答集
S103 外部コマンド呼出し http://www.gimlay.org/~javafaq/javafaq.html#S103 | ||||
|
投稿日時: 2004-11-10 00:03
皆さんいろいろな回答ありがとうございます。
早速試して見たいと思います。 | ||||
