【问题标题】:Java JLabel, Why does "<html>/* test */</html>" result in the JLabel being empty?Java JLabel,为什么“<html>/* test */</html>”会导致 JLabel 为空?
【发布时间】:2014-05-23 03:55:14
【问题描述】:

我有一个JLabel 我正在这样填充它

String descriptionText = StringEscapeUtils.escapeHtml(rule.getDescription());
descriptionText = descriptionText.replaceAll("\n", "<br>");
descriptionLbl.setText(String.format("<html>%s</html>", descriptionText));

在这种情况下,如果rule.getDescription() 返回类似"/* test */" 的结果,那么最终结果是一个空的JLabel?为什么是这样?我以为StringEscapeUtils#escapeHtml 会捕获所有转义字符。

【问题讨论】:

  • Hm.../* test */ 是 java 注释,但 OP 是在 HTML 内部谈论字符串内部。所以java注释语法是无关紧要的。
  • 您是否尝试过在设置标签文本之前执行System.out.println(descriptionText); 以查看该字符串是否包含您期望的内容?还可以尝试将 format 调用的结果放入 String 变量中,以便您也可以将其打印出来进行确认。
  • @FrobberOfBits 是的。这很奇怪。我很好地在 /* 上进行查找和替换,但我想知道我是否会遇到其他一些疯狂的事情。我找不到任何可以解释为什么会发生这种情况的文档。
  • @Cogman 只是为了笑,你试过
    /* test */
    吗?我不能在这里给你答案,我只能表示同情,因为我在 Swing 应用程序中遇到了很多关于 HTML 的问题。如果可以的话,我会尽量避免它,因为它有很多边缘情况和奇怪的细节。

标签: java html swing jlabel


【解决方案1】:

这是一个显示问题的较小的测试应用:

import javax.swing.JFrame;
import javax.swing.JLabel;

public class LabelTest {

    public static void main(String args[]) {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label = new JLabel();

        String text = "<html>/test</html>";

        label.setText(text);

        frame.add(label);

        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}

我发现的唯一解决方法是改用特殊的 html 代码:

String text = "<html>&#47;test</html>";

你可以有一个使用 replaceAll() 的处理方法来自动化这个过程。

我不确定为什么会发生这种情况,而且它似乎不会发生在任何其他特殊字符上。很奇怪。

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-04-14
    • 2014-12-09
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多