我已经编写了一个java小程序,并且已经运行了很长一段时间。在applet中,我有一堆在文本内容中使用JLabels的(这是允许的,并且已经工作多年了)。我使用HTML的主要原因是允许在JLabels中换行。
问题:最近,中包含了HTML的JLabels (有些没有)停止显示文本。我认为这可能与最近的java更新有关(Java 6 update 22,在2010年10月12日),但问题似乎在那时就开始了。也许有个窃听器被引入了?还是移除特征?
我尝试过使用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,但我做了简短的尝试,在IE8也。另外,我(显然)已经安装了最新的Java 6更新22作为我的运行时,并为我的JDK提供了匹配的更新。我简单地使用"javac HelloWorldApplet.java“编译了上面的测试小程序。
发布于 2010-12-06 15:02:09
浪费了一个下午寻找原因,请参阅下面的bug报告http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6993691
bug报告中的解决方法是:
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);
}
}发布于 2010-12-02 00:46:01
从描述中传来的声音就像一个线程问题。
不幸的是,在AWT事件调度线程(EDT)上没有构造小程序或调用它们的生命周期方法。
从技术上讲,您的构造函数和init代码应该在java.awt.EventQueue.invokeAndWait中执行。
https://stackoverflow.com/questions/4330602
复制相似问题