HTML больше не работает в JLabel (и других компонентах) - PullRequest
9 голосов
/ 02 декабря 2010

У меня есть Java-апплет, который я написал, и уже давно запускаю его.В апплете у меня есть куча JLabels, которые используют HTML в своем текстовом содержимом (что разрешено и работает уже много лет).Основная причина, по которой я использую HTML, заключается в том, что в JLabels разрешены разрывы строк.

Проблема: относительно недавно JLabels, в которых есть HTML (некоторые не), перестали отображать свой текст.Я думаю, что это может быть как-то связано с недавним обновлением Java (Java SE 6 Update 22, 2010-Oct-12), не на 100% уверенным, но проблемы, похоже, начались тогда.Может быть, ошибка была введена?или функция удалена?

Я пытался использовать JEditorPane, и у меня, похоже, были те же проблемы, когда содержимое было HTML.

Также важно отметить, что при первой загрузке апплета (сначалакогда запускается среда выполнения Java), она работает FINE, но если вы обновляете веб-страницу, возникают проблемы, как описано.

Есть ли у кого-нибудь подобные проблемы?У кого-нибудь есть идеи?или я просто что-то делаю глупо?

Я сделал очень простой тестовый апплет и могу воспроизвести проблемы со 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.Кроме того, у меня (очевидно) установлено последнее обновление 22 для Java SE 6, установленное в качестве среды выполнения, и соответствующее обновление для моего JDK.Я компилирую вышеупомянутый тестовый апплет, используя просто: "javac HelloWorldApplet.java"

Ответы [ 2 ]

7 голосов
/ 06 декабря 2010

Потратил впустую день, ища причину этого, см. Следующий отчет об ошибке 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);
    }
}
0 голосов
/ 02 декабря 2010

Звучит из описания как проблема с потоками.

К сожалению, апплеты не созданы или их методы жизненного цикла вызваны в потоке диспетчеризации событий AWT (EDT).

Технически ваш конструктор и init код должны выполняться внутри java.awt.EventQueue.invokeAndWait.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...