Java Swing / AWT with setIcon Gif Animated High Load

时间:2011-10-29 09:21:58

标签: java swing animation awt

我有 1个单独的java应用。仅包含 1 JMenu 48个JMenuItem 。 每个JMenuItems我设置图标与动画GIF

创建它没有问题。 运行它时我也没有问题。 但问题出现了,当我运行它,然后查看JMenuItem。 我的 GIF(s)动画似乎正在消耗PC进程非常高! 而ANimation似乎跳得太快了!这不是通常的动画帧率,很难。

所以当我运行java应用程序,然后尝试 JMenuItem 时, CPU进程 越来越高了......!

看看this Preview:当我的Java应用程序运行时。 解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

你从这个SSCCE得到什么结果?我的系统在启动时达到40,然后跳到平均20-30左右。动画GIF的渲染有点不稳定。

import java.awt.*;
import javax.swing.*;

class Gif48 {

    public static void main(String[] args)  {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                String url = "http://1point1c.org/gif/thum/plnttm.gif";
                int w = 12;
                int h = 4;
                JPanel p = new JPanel(new GridLayout(h,w,2,2));
                String pre = "<html><body><img src='";
                String post = "'>";
                for (int ii=0; ii<w*h; ii++) {
                    JLabel l = new JLabel(
                        pre + url + post );
                    l.setBackground(Color.BLACK);
                    l.setOpaque(true);
                    p.add(l);
                }
                JOptionPane.showMessageDialog(null, p);
            }
        });
    }
}
  

解决这个问题的最佳方法是什么?

不要在GUI的控件中使用动画GIF。

答案 1 :(得分:1)

我找到了解决方案的人! GIF动画有很多帧。在每个帧中,他们有自己的时间。当我重新打开一个GIF动画文件时,我可以清楚地看到0时帧速率是问题所在。现在我应该将它改为略高于0.1帧率,这就解决了所有问题。