【问题标题】:Setting HTML content to JTextPane messes up System.out redirection将 HTML 内容设置为 JTextPane 会破坏 System.out 重定向
【发布时间】:2014-05-02 20:31:21
【问题描述】:

我正在使用MessageConsole 类将System.outSystem.err 重定向到名为JTextPaneJTextPane

我在构造函数中这样配置它:

jMessageConsoleTextPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
MessageConsole mc = new MessageConsole(jMessageConsoleTextPane, true);
mc.redirectOut(null, null);
mc.redirectErr(Color.RED, null);
mc.setMessageLines(100);

在 NetBeans 中,我将其设置为 contentType text/html

使用System.outSystem.err 打印一切正常,但我的问题来了。我尝试将 jMessageConsoleTextPane 的文本设置为我根据一些变量创建的 html 表(其中包含另外两个 html 表),所以我这样做了:

String htmlTable = WordCounting.getHtmlTable(wordsArrays, hashtagsArrays);
jMessageConsoleTextPane.setText(htmlTable);

下面是htmlTable 字符串的样子(直接取自调试器):

<html>
   <body>
      <table>
         <tr>
            <td>
               <table border="1">
                  <th colspan="3">Words used most</th>
                  <tr>
                     <td>1</td>
                     <td>day</td>
                     <td>3720</td>
                  </tr>
                  <tr>
                     <td>2</td>
                     <td>good</td>
                     <td>3354</td>
                  </tr>
                  <tr>
                     <td>3</td>
                     <td>love</td>
                     <td>2689</td>
                  </tr>
                  <tr>
                     <td>4</td>
                     <td>time</td>
                     <td>2372</td>
                  </tr>
                  <tr>
                     <td>5</td>
                     <td>got</td>
                     <td>1897</td>
                  </tr>
                  <tr>
                     <td>6</td>
                     <td>lot</td>
                     <td>1831</td>
                  </tr>
                  <tr>
                     <td>7</td>
                     <td>know</td>
                     <td>1801</td>
                  </tr>
                  <tr>
                     <td>8</td>
                     <td>photo</td>
                     <td>1772</td>
                  </tr>
                  <tr>
                     <td>9</td>
                     <td>girl</td>
                     <td>1755</td>
                  </tr>
                  <tr>
                     <td>10</td>
                     <td>life</td>
                     <td>1754</td>
                  </tr>
               </table>
            </td>
            <td>
               <table border="1">
                  <th colspan="3">Hashtags used most</th>
                  <tr>
                     <td>1</td>
                     <td>win</td>
                     <td>136</td>
                  </tr>
                  <tr>
                     <td>2</td>
                     <td>panjaforpunjab</td>
                     <td>105</td>
                  </tr>
                  <tr>
                     <td>3</td>
                     <td>aaronto600k</td>
                     <td>100</td>
                  </tr>
                  <tr>
                     <td>4</td>
                     <td>rt</td>
                     <td>89</td>
                  </tr>
                  <tr>
                     <td>5</td>
                     <td>giveaway</td>
                     <td>85</td>
                  </tr>
                  <tr>
                     <td>6</td>
                     <td>cfc</td>
                     <td>70</td>
                  </tr>
                  <tr>
                     <td>7</td>
                     <td>whybeinarelationshipwhen</td>
                     <td>65</td>
                  </tr>
                  <tr>
                     <td>8</td>
                     <td>retweet</td>
                     <td>64</td>
                  </tr>
                  <tr>
                     <td>9</td>
                     <td>gameinsight</td>
                     <td>64</td>
                  </tr>
                  <tr>
                     <td>10</td>
                     <td>rhoareunion</td>
                     <td>57</td>
                  </tr>
               </table>
            </td>
         </tr>
      </table>
   </body>
</html>

这是jMessageConsoleTextPane 中的样子:

然后我尝试使用System.out 应该打印下面的文本:

[23:19:32] Getting driver...
[23:19:32] Connecting to database...
[23:19:32] Executing query...
5.6.16

这会发生:

基本上所有内容都添加到第二个表格的最后一个单元格中。即使我这样做jMessageConsoleTextPane.setText("") 也有一个像这样的表格单元格(左上角):

那么发生了什么?为什么还有一个单元格,我该如何修复它?

【问题讨论】:

    标签: java html swing text html-table


    【解决方案1】:

    MessageConsole 类并非设计用于与 HTML 一起使用。该类所做的只是将文本添加到 Document 的末尾,在您的情况下,这似乎是表格的最后一个单元格。

    您可以尝试在首次创建 HTML 时向文档添加一个空的 HTML 标记。那么也许文本会被添加到这个标签而不是表格单元格中。

    可能是这样的:

           </table>
       <p></p>
    </body>
    

    这一切都取决于 Document 如何解析插入到 Document 中的文本。

    【讨论】:

    • 使用&lt;p&gt;&lt;/p&gt; 会使每一行都有一个额外的断线,但我尝试了&amp;nbsp;,看起来效果很好,谢谢。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多