我有一个我编写过的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”
答案 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)