2011-02-24 28 views

Respuesta

1

Vas a tener que reorientar System.out a una costumbre, subclase observable de PrintStream, de manera que cada línea de carbón o añadirse a esa corriente puede actualizar el contenido de la caja de texto (supongo, esta es una AWT o componente Swing)

la instancia PrintStream podría crearse con un ByteArrayOutputStream, que recogería la salida del redirigido System.out

2

Uno de la forma en que puede hacerlo mediante el establecimiento de la System OutputStream a un PipedOutputStream y conectar eso a un PipedInputStream que lea desde para agregar texto a su componente, Ej.

PipedOutputStream pOut = new PipedOutputStream(); 
System.setOut(new PrintStream(pOut)); 
PipedInputStream pIn = new PipedInputStream(pOut); 
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn)); 

¿Has visto el siguiente enlace? Si no, entonces debes hacerlo.

2

He encontrado esta solución sencilla:

En primer lugar, usted tiene que crear una clase para reemplazar la salida estándar:

public class CustomOutputStream extends OutputStream { 
    private JTextArea textArea; 

    public CustomOutputStream(JTextArea textArea) { 
     this.textArea = textArea; 
    } 

    @Override 
    public void write(int b) throws IOException { 
     // redirects data to the text area 
     textArea.append(String.valueOf((char)b)); 
     // scrolls the text area to the end of data 
     textArea.setCaretPosition(textArea.getDocument().getLength()); 
     // keeps the textArea up to date 
     textArea.update(textArea.getGraphics()); 
    } 
} 

A continuación, sustituir las normas de la siguiente manera:

JTextArea textArea = new JTextArea(50, 10); 
PrintStream printStream = new PrintStream(new CustomOutputStream(textArea)); 
System.setOut(printStream); 
System.setErr(printStream); 

El El problema es que todas las salidas se mostrarán solo en el área de texto.

Fuente con una muestra: http://www.codejava.net/java-se/swing/redirect-standard-output-streams-to-jtextarea

+0

Esto es casi perfecto, pero cada vez que la consola da salida, el área de texto parpadea un montón. En lugar de agregar, use 'textArea.setText (textArea.getText() + String.valueOf ((char) paramInt));' en su lugar, no parpadea y fluye como el 'System.out' original. –

+0

Puede que tenga que usar SwingUtilities.invokeLater() para que esto funcione. –

Cuestiones relacionadas