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
执行。