2010-05-21 64 views
6

我正在使用的一個類有一個display()函數,它可以在屏幕上打印一些信息。我不能改變它。有沒有辦法「抓住」從外部打印到屏幕上的字符串?在Java中捕捉屏幕打印

它顯示在控制檯上。

+0

它如何打印?圖形,還是控制檯? – aioobe 2010-05-21 14:45:02

回答

5

我能想出的最接近的東西就是捕捉並轉發通過System.out打印的所有東西。

看看setOut(java.io.PrintStream)的方法。

一個完整的例子是:

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

如何使用'printf(String format,String)'做到這一點? – 2010-05-21 20:33:46

+0

重寫您想截取的方法。 (就像println在上面一樣) – aioobe 2010-05-21 20:40:23

+0

我的意思是,在最初的'System.out'制定出格式之後,我怎麼得到字符串? – 2010-05-21 20:56:14

2

我不熟悉標準顯示在Java中()操作,這可能是唯一的,你正在使用的框架。它打印到控制檯?顯示一個消息框?

如果您正在討論打印輸出通過System.out.println()System.err.println()到控制檯,那麼是的。您可以重定向標準輸入和標準輸出。 使用:

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

並創建適當的流(如文件)。