JEditorPane высокая загрузка процессора при отображении определенных неанимированных GIF-файлов - PullRequest
1 голос
/ 02 марта 2012

Мое приложение показывает RSS-записи в JEditorPane.Это работает не так уж и плохо, но я столкнулся с серьезной проблемой в последнее время при отображении GIF.Вот небольшой тестовый пример:

public class JEditorPaneTest
{
    public static void main(String[] args)
    {
        JFrame dialog = new JFrame("JEditorPane test");
        dialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = dialog.getContentPane();

        c.setLayout(new BorderLayout());
        JEditorPane editorPane = new JEditorPane();
        editorPane.setEditorKit(new HTMLEditorKit());
        editorPane.setText("<html><body><img src=\"http://feeds.feedburner.com/~ff/MacRumors-All?d=yIl2AUoC8zA\"></body></html>");
        c.add(new JScrollPane(editorPane), BorderLayout.CENTER);

        dialog.pack();
        dialog.setVisible(true);
    }
}

Мерцает неанимированный GIF, и загрузка процессора составляет до 300% (четырехъядерный компьютер) в Mac OS X или 50% в Windows 7. Эта проблема дажеболее серьезный, поскольку после удаления панели редактора загрузка ЦП все еще остается высокой.

Если посмотреть на некоторые профилирования, то кажется, что 50% времени использования ЦП приходится на поток диспетчера событий, а остальные 50%в sun.awt.image.ImageFetcher.run ().

Еще один интересный факт заключается в том, что это происходит также при встраивании html в JLabel.

(РЕДАКТИРОВАТЬ: 9 марта 2012 г.) Еще один интересный фактв том, что если файл сначала загружается локально (и к нему обращается file: // ...) или даже, будучи ресурсом, ничего не исправляет.Но если изображение отображается в ImageIcon в JLabel, мерцание и высокая загрузка ЦП отсутствуют.Почему-то мне действительно нужно использовать HTML-документ в JEditorPane для рендеринга некоторого базового форматирования HTML.

Я ищу общее решение, чтобы избежать цензуры изображений с feedburner.com, и эти gif-файлы с feedburner.comЕдинственный, который я нашел, но я хотел бы предотвратить ошибку со всеми другими изображениями, которые могут вести себя так же.

Большое спасибо.

1 Ответ

1 голос
/ 03 марта 2012

Получить изображение с веб-сайта, используя HttpURLConnection.

Сохраните изображение на локальный диск в виде файла GIF.

Попробуйте это в вашем методе editorPane.setText:

<html>
<body>
<img src="images/picture.gif">
</body>
</html>

Где источник изображения указывает на сохраненный вами файл GIF.

...