当前位置: 代码迷 >> Eclipse >> java缴获控制台输出
  详细解决方案

java缴获控制台输出

热度:39   发布时间:2016-04-23 01:32:53.0
java截获控制台输出
package org.com.consoleTextArea;

import java.awt.TextArea;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.text.Document;

public class ConsoleTextArea extends TextArea {
public ConsoleTextArea(InputStream[] inStreams) {
for (int i = 0; i < inStreams.length; ++i)
startConsoleReaderThread(inStreams[i]);
} // ConsoleTextArea()

public ConsoleTextArea() throws IOException {
final LoopedStreams ls = new LoopedStreams();
// redirect System.out and System.err
PrintStream ps = new PrintStream(ls.getOutputStream());
System.setOut(ps);
System.setErr(ps);
startConsoleReaderThread(ls.getInputStream());
} // ConsoleTextArea()

private void startConsoleReaderThread(InputStream inStream) {
final BufferedReader br = new BufferedReader(new InputStreamReader(
inStream));
new Thread(new Runnable() {
public void run() {
StringBuffer sb = new StringBuffer();
try {
String s;
Document doc =getDocument();
while ((s = br.readLine()) != null) {
boolean caretAtEnd = false;
caretAtEnd = getCaretPosition() == doc.getLength() ? true
: false;
sb.setLength(0);
append(sb.append(s).append('\n').toString());
if (caretAtEnd)
setCaretPosition(doc.getLength());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null,
"read from BufferedReader err:" + e);
System.exit(1);
}
}
}).start();
} // startConsoleReaderThread()
 // ConsoleTextArea
public static void main(String[] args) {
    JFrame f = new JFrame("ConsoleTextArea测试");
    ConsoleTextArea consoleTextArea = null;
    try {
        consoleTextArea = new ConsoleTextArea();
    }
    catch(IOException e) {
        System.err.println(
            "不能创建LoopedStreams:" + e);
        System.exit(1);
    }
    consoleTextArea.setFont(java.awt.Font.decode("monospaced"));
    f.getContentPane().add(new JScrollPane(consoleTextArea),
        java.awt.BorderLayout.CENTER);
    f.setBounds(50, 50, 300, 300);
    f.setVisible(true);
    f.addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowClosing(
            java.awt.event.WindowEvent evt) {
            System.exit(0);
  相关解决方案