HTML不再适用于JLabel(和其他组件)

时间:2010-12-02 00:36:27

标签: java applet

我有一个我编写过的java applet,并且已经运行了很长一段时间。在applet中,我有一堆在其文本内容中使用HTML的JLabel(这是允许的,并且已经工作多年)。我使用HTML的主要原因是允许JLabel中的换行符。

问题:最近,其中包含HTML的JLabel(有些没有)停止显示其文本。我认为它可能与最近的Java更新(Java SE 6 Update 22,2010年10月12日)有关,但不是100%肯定,但问题似乎确实在那时开始。也许已经引入了一个bug?或删除功能?

我尝试使用JEditorPane,当内容为HTML时似乎也有同样的问题。

另外需要注意的是,第一次加载applet时(第一次启动java运行时)它的工作速度很快,但如果刷新网页则会出现上述问题。

有没有人有类似的问题?有谁有任何见解?或者我只是在做一些愚蠢的事情?

我制作了一个非常简单的测试小程序,我可以100%规律地重现问题(记住第一次运行时加载它会正常工作,只有连续的刷新会导致问题):

[HelloWorldApplet.java]

import javax.swing.*;

public class HelloWorldApplet extends JApplet
{
    public void init()
    {
        this.add(new JLabel("Hello Everybody (Text)"), java.awt.BorderLayout.NORTH);
        this.add(new JLabel("<html><body>Hello Everybody (HTML)</body></html>"), java.awt.BorderLayout.SOUTH);
    }
}

[HellowWorldApplet.html]

<html>
<title>A Test</title>
<body>
    <applet code="HelloWorldApplet.class" width="320" height="120">
        You need Java
    </applet>
</body>
</html>

PS。我一直主要使用Chrome测试,但我也在IE 8中尝试过。 此外,我(显然)安装了最新的Java SE 6更新22作为我的运行时间,并具有我的JDK的匹配更新。我使用简单的编译上面的测试applet:“javac HelloWorldApplet.java”

2 个答案:

答案 0 :(得分:7)

浪费了一个下午查找原因,请参阅以下错误报告http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6993691

错误报告中的解决方法是:

import javax.swing.*;
import javax.swing.text.html.parser.ParserDelegator;

public class HelloWorldApplet extends JApplet {
    public void init() {
       ParserDelegator workaround = new ParserDelegator();
       applet.add(new JLabel("Hello Everybody (Text)"), java.awt.BorderLayout.NORTH);
       applet.add(new JLabel("<html>Hello Everybody (HTML)</html>"),  java.awt.BorderLayout.SOUTH);
    }
}

答案 1 :(得分:0)