JEditorPane高CPU使用率,同时显示特定的非动画GIF

问题描述 投票:1回答:2

我的应用程序在JEditorPane中显示RSS条目。它的效果还不错,但是最近在显示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闪烁,在Mac OS X上,CPU使用率高达300%(四核计算机),在Windows 7上,CPU使用率高达50%。此问题甚至更为严重,因为在放置编辑器窗格后,CPU使用率为仍然那么高。

[看一些分析,看起来cpu使用时间的50%在事件分发程序线程中,而其他50%在sun.awt.image.ImageFetcher.run()中。

另一个有趣的事实是,将HTML嵌入JLabel时也会发生。

((编辑:2012年3月9日),另一个有趣的事实是,如果该文件首先在本地下载(并由file:// ...访问),或者甚至作为一种资源都无法解决任何问题。但是,如果图像显示在JLabel的ImageIcon中,则不会出现闪烁和CPU使用率过高的情况。我确实需要以某种方式在JEditorPane中使用HTML文档来呈现一些基本的HTML格式。

我正在寻找一种通用的解决方案,以免检查feedburner.com上的图像,而feedburner.com上的这些gif是我发现的唯一图像,但我想避免所有其他行为相同的图像出现错误方式。

非常感谢。

java performance swing gif jeditorpane
2个回答
1
投票

使用HttpURLConnection从网站获取图像。

将图像另存为gif文件到本地驱动器。

在您的editorPane.setText方法中尝试:

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

图像源指向您保存的gif文件的位置。


0
投票

我知道这已经很老了,但是我在另一个项目的JEditor窗格中也遇到了CPU使用率过高的问题,因此我决定尝试一下您的测试用例。到adding debugging to the event queue,我确定它正在不断重画屏幕,因为该特定图像是动画gif。它可能看起来没有动画,但实际上是动画gif。

如果将其转换为未动画的gif或PNG,它将解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.