2012-11-08 59 views
0

警告消息我寫一個使用jtidy清理從一個URL獲得源代碼的html的程序。我想在GUI中顯示錯誤和警告,在JTextArea中。我將如何將打印到stdout的警告「重新路由」到JTextArea?我查看了Jtidy API,沒有看到任何我想要的東西。任何人都知道我能做到這一點,或者甚至有可能嗎?顯示Jtidy錯誤/ GUI中的JTextArea

//測試jtidy選項

public void test(String U) throws MalformedURLException, IOException 
{ 
    Tidy tidy = new Tidy(); 
    InputStream URLInputStream = new URL(U).openStream(); 
    File file = new File("test.html"); 
    FileOutputStream fop = new FileOutputStream(file); 

    tidy.setShowWarnings(true); 
    tidy.setShowErrors(0); 
    tidy.setSmartIndent(true); 
    tidy.setMakeClean(true); 
    tidy.setXHTML(true); 
    Document doc = tidy.parseDOM(URLInputStream, fop); 
} 

回答

1

假設JTidy打印錯誤和警告到stdout,你可以temporarily change where System.out calls go

PrintStream originalOut = System.out; 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream myOutputStream = new PrintStream(baos); 
System.setOut(myOutputStream); 

// your JTidy code here 

String capturedOutput = new String(baos.toByteArray(), StandardCharsets.UTF_8); 
System.setOut(originalOut); 

// Send capturedOutput to a JTextArea 
myTextArea.append(capturedOutput); 

an analogous method,如果你需要爲System.err做到這一點,而不是/以及。

+0

我試過了,但「StandardCharsets.UTF_8」一部分給我一個錯誤,只創建一個類使用該名稱(在Eclipse)的選項,我需要進口的東西,還是有一個小錯字嗎? – cHam

+0

它是Java 7的一部分。如果你還沒有,你可以完全忽略charset參數,儘管這不是最佳實踐。否則,傳遞'Charset.forName(「UTF-8」)'並捕獲異常(實際上它將永遠不會拋出)。另見http://stackoverflow.com/questions/1684040/java-why-charset-names-are-not-constants –