9 Stimmen

HTML funktioniert nicht mehr in JLabel (und anderen Komponenten)

Ich habe ein Java-Applet, das ich geschrieben habe, und habe es für eine ganze Weile ausgeführt. In dem Applet habe ich eine Reihe von JLabels, die HTML in ihrem Textinhalt verwenden (was erlaubt ist und seit Jahren funktioniert). Der Hauptgrund für die Verwendung von HTML ist, dass ich Zeilenumbrüche in JLabels zulasse.

Das Problem: Seit kurzem zeigen die JLabels, die HTML enthalten (einige nicht), ihren Text nicht mehr an. Ich denke, es könnte etwas mit dem jüngsten Java-Update zu tun haben (Java SE 6 Update 22, am 12. Oktober 2010). Ich bin mir nicht 100-prozentig sicher, aber die Probleme schienen etwa zu diesem Zeitpunkt zu beginnen. Vielleicht wurde ein Fehler eingeführt? oder eine Funktion entfernt?

Ich habe es mit einem JEditorPane versucht und schien die gleichen Probleme zu haben, wenn der Inhalt HTML war.

Auch etwas wichtig zu beachten ist, dass das erste Mal, wenn Sie das Applet laden (zum ersten Mal Ihre Java-Laufzeit startet) es funktioniert FINE, aber wenn Sie die Webseite aktualisieren, dann hat es die Probleme wie beschrieben.

Hat jemand ähnliche Probleme? hat jemand irgendwelche Erkenntnisse? oder mache ich nur etwas Dummes?

Ich habe ein sehr einfaches Test-Applet erstellt und kann die Probleme mit 100-prozentiger Regelmäßigkeit reproduzieren (wenn man bedenkt, dass das erste Mal, wenn die Runtime geladen wird, alles gut funktioniert, nur aufeinanderfolgende Aktualisierungen verursachen die Probleme):

[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.h

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

PS. Ich habe hauptsächlich mit Chrome getestet, aber ich habe es auch kurz im IE 8 versucht. Außerdem habe ich (natürlich) das neueste Java SE 6 Update 22 als Laufzeitumgebung installiert und habe das passende Update für mein JDK. Ich kompiliere das obige Test-Applet einfach mit: "javac HelloWorldApplet.java".

7voto

kolmis Punkte 86

Ich habe einen Nachmittag mit der Suche nach der Ursache dieses Problems verschwendet, siehe den folgenden Fehlerbericht http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6993691

Die Abhilfe im Fehlerbericht lautet:

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);
    }
}

0voto

Tom Hawtin - tackline Punkte 142461

Die Beschreibung klingt nach einem Einfädelproblem.

Leider werden Applets nicht im AWT-Ereignis-Dispatch-Thread (EDT) erstellt oder ihre Lebenszyklusmethoden dort aufgerufen.

Technisch gesehen sind Ihr Konstruktor und init Der Code sollte innerhalb von java.awt.EventQueue.invokeAndWait .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X