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

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

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

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

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

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

我做了一个非常简单的测试applet,我可以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("Hello Everybody (HTML)"), java.awt.BorderLayout.SOUTH); } } 

[HellowWorldApplet.html]

  A Test   You need Java    

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

浪费了一个下午寻找原因,请参阅以下错误报告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("Hello Everybody (HTML)"), java.awt.BorderLayout.SOUTH); } } 

听起来像是一个线程问题。

不幸的是,没有构建applet或者在AWT事件调度线程(EDT)上调用它们的生命周期方法。

从技术上讲,你的构造函数和init代码应该在java.awt.EventQueue.invokeAndWait执行。