2010-05-21 13 views
6

Hay una clase con la que estoy trabajando que tiene una función display() que imprime cierta información en la pantalla. No puedo cambiarlo. ¿Hay alguna forma de "capturar" la cadena que imprime en la pantalla externamente?Captura de impresiones de pantalla en Java

Se muestra en la consola.

+0

¿Cómo lo imprime? Gráficamente, o para consolar? – aioobe

Respuesta

5

Lo más parecido que se me ocurre es capturar y reenviar todo lo impreso a través de System.out.

Eche un vistazo al método setOut(java.io.PrintStream).

Un ejemplo completo sería:

import java.io.PrintStream; 

public class Test { 

    public static void display() { 
     System.out.println("Displaying!"); 
    } 

    public static void main(String... args) throws Exception { 
     final List<String> outputLog = new ArrayList<String>(); 
     System.setOut(new PrintStream(System.out) { 
      public void println(String x) { 
       super.println(x); 
       outputLog.add(x); 
      } 

      // to "log" printf calls: 
      public PrintStream printf(String format, Object... args) { 
       outputLog.add(String.format(format, args)); 
       return this; 
      } 
     }); 

     display(); 
    } 
} 
+0

¿Cómo hago esto con 'printf (String format, String)'? –

+0

Reemplace el método que desea interceptar. (al igual que println es overidden arriba) – aioobe

+0

Quiero decir, ¿cómo obtengo la cadena después de que el 'System.out' original resolvió el formato, etc.? –

2

No estoy familiarizado con una pantalla estándar() operación en Java, esto podría ser única para el marco que está trabajando. ¿se imprime en la consola? muestra un cuadro de mensaje?

Si está hablando de impresiones que van a través de System.out.println() y System.err.println() a la consola, entonces sí. Puede redirigir la entrada estándar y la salida estándar. Uso:

System.setErr(debugStream); 
    System.setOut(debugStream); 

y crear las corrientes apropiadas (por ejemplo, archivos).