2010-03-16 41 views
2

在Java中,我有一個將XML元數據從一種標準轉換爲另一種標準的軟件包。該包最終通過一個函數訪問,並通過PrintStream對象發送其所有輸出。發送的輸出只是每個文件的狀態以及它是否被翻譯。如果可能,將Java PrintStream中的信息發送到JTextPane的最佳方法是什麼?

這是非常非常愉快,如果我只是打印到System.out,但實際上,我希望把它打印出來給JTextPane中其轉換(有點像一個進步文本框)。在翻譯XML之後打印狀態並不重要,但由於可能有數以千計的XML文件,這是不可行的。

我試過的一件事是使用一個線程,該線程從PrintStream(連接到ByteArrayOutputStream)獲取所有信息,並讓它將任何新信息發送到文本窗格。不幸的是,這仍然在翻譯結束時立即發送所有信息。這確實爲System.out正常工作。

下面是做翻譯,並試圖顯示輸出代碼:

public class ConverterGUI extends javax.swing.JFrame { 

    boolean printToResultsBox = false; 
    PrintStream printStream = null; 
    ByteArrayOutputStream baos = null; 

    private class ResultsPrinter implements Runnable { 

     public ResultsPrinter() { 
      baos = new ByteArrayOutputStream(); 
      printStream = new PrintStream(baos); 
     } 

     public void run() { 
      String tempString = ""; 
      while (printToResultsBox) { 
       try { 
        if (!baos.toString().equals(tempString)) { 
         tempString = baos.toString(); 
         resultsBox.setText(tempString); 
        } 
       } catch (Exception ex) { 
       } 
      } 
     } 
    } 

    ... 

    ResultsPrinter rp = new ResultsPrinter(); 
    Thread thread = new Thread(rp); 
    thread.start(); 

    // Do the translation. 
    try { 
     printToResultsBox = true; 
     boolean success = false; 
     TranslationEngine te = new TranslationEngine(); 
     // fileOrFolderToConvert is a text box in the GUI. 
     // linkNeeded and destinationFile are just parameters for the translation process. 
     success = te.translate(fileOrFolderToConvert.getText(), linkNeeded, destinationFile, printStream); 
     if (success) { 
      printStream.println("File/folder translation was a success."); 
     } 
     resultsBox.setText(baos.toString()); 
    } catch (Exception ex) { 
     printStream.println("File translation failed."); 
    } finally { 
     printToResultsBox = false; 
    } 

    ... 

} 

最終,這個代碼打印出來的的JTextPane就好畢竟翻譯完成,但沒有在。有什麼建議麼?我是否需要將PrintStream更改爲其他內容?

回答

相關問題