2012-06-24 31 views
0

有沒有辦法從我的程序中調用的類的方法獲取或攔截輸出流(特別是System.out)?從被調用的java方法獲取輸出流

我創建名爲mainMethod對象,使用URLClassLoader中要加載的類,然後調用main.invoke();用正確的參數。

我希望能夠捕獲該方法的執行輸出,它仍然可以顯示在屏幕上,但我也需要能夠處理輸出。

注意:此方法實際上是一個連續運行的服務器應用程序。

請讓我知道是否需要更多的澄清,並讓我知道如果這樣的事情甚至是可能的。

感謝您的幫助!

+1

什麼輸出流?你說話似乎只有一個。任何方法都可以產生儘可能多的輸出,如輸出流,編寫器,數據庫,Web服務器等等。這個問題確實沒有多大意義。 – EJP

+0

我在說的是System.out用於在終端屏幕上顯示文本的主要輸出。 – KayoticSully

回答

1

假設你正在談論的System.out或System.err的輸出流...

最好的方式來實現你所說的其實是傳遞的OutputStream作爲參數。這可能是System.out,但可以很容易地更改爲任何你想要的。

不通過參數來做到這一點的一種方法是用你自己的默認System.out來替換它,它檢查堆棧以確定它從哪裏被調用。我建議你這樣做,除非沒有其他選擇。例如您無法訪問您所調用方法的代碼。

如果您正在談論其他一些OutputStream,則必須替換使用的outputstream的代碼和允許跟蹤輸出的代碼。這是最黑的解決方案,但它會工作。

+1

雖然這不是我解決問題的方法(對於我想要的東西比我想象的要容易得多)。我選擇這個,因爲如果我沒有找到適合我的情況的具體解決方案,我將如何解決問題。 – KayoticSully