- - PR -
コンソール出力について
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-24 20:48
>2.FileWriterで書き出して、動作中に出力されているか? 「長い処理」は別スレッドで処理するようにしておいて、以下のコードで試してみました. File logFile=new File("xxxx-log.txt"); FileOutputStream logOutStream=new FileOutputStream(logFile); PrintStream logPrintStream=new PrintStream(logOutStream, true); System.setOut(logPrintStream); System.setErr(logPrintStream); "xxxx-log.txt"には全メッセージが正常に書き込まれていました.完璧でした.とすると悪いのはやはり私の作った public class JTextAreaOutputStream extends ByteArrayOutputStream ということになります. 以上 | ||||||||
|
投稿日時: 2007-05-24 21:01
サンプルを書いてみたのでどうぞ。
なるほど、処理が別スレッドなのを暗黙の前提と思っていましたが 確認していないですから注意を払うべきところでした。 | ||||||||
|
投稿日時: 2007-05-24 21:23
nagise様
サンプルをいただきましてどうもありがとうございます. 私の書いたコードはinvokeLater()のパラメータになるRunnable()のインスタンスを使いまわしていたのが悪かったようです.ちょうどさっき以下のコードでまともに動いてくれました.今度は、ログは全部まともにJTextAreaに出力されるようになりました. まだ何か悪いところがあるかもしれませんが、とりあえず私のも載せておきます.でもflushのトリガでやった方がスマートですね.本当にいろいろありがとうございました. public class JTextAreaOutputStream extends ByteArrayOutputStream { private JTextArea jtextArea; private AddToTextArea addTextArea; public JTextAreaOutputStream(JTextArea jtextArea){ super(); this.jtextArea=jtextArea; addTextArea=new AddToTextArea(); this.addTextArea.setJtextArea(this.jtextArea); } public synchronized void write(byte[] b, int off, int len){ super.write(b, off, len); appendString(); this.reset(); } public synchronized void write(byte[] b) throws IOException{ super.write(b); appendString(); this.reset(); } public synchronized void write(int b){ super.write(b); appendString(); this.reset(); } /** * Append text to JTextArea */ private synchronized void appendString(){ String outputStr=this.toString(); AddToTextArea addToTextArea=new AddToTextArea(); addToTextArea.setJtextArea(this.jtextArea); addToTextArea.setOutputStr(outputStr); SwingUtilities.invokeLater(addToTextArea); } } class AddToTextArea implements Runnable{ private JTextArea jtextArea; private String outputStr; public void setJtextArea(JTextArea jtextArea){ this.jtextArea=jtextArea; } public void setOutputStr(String outputStr){ this.outputStr=outputStr; } public void run(){ jtextArea.append(outputStr); } } 以上 |
«前のページへ
1|2|3