Java GIF изображения, потребляющие процессор и память - PullRequest
1 голос
/ 01 марта 2011

В моем приложении я интенсивно использую анимированные GIF-изображения, отображаемые в JEditorPane (это чат). Теперь я осознал, что GIF-файлы потребляют много ресурсов ЦП (в некоторых случаях около 100%), а используемая память продолжает увеличиваться бесконечно.

Как этого избежать? Или вы можете предложить другой компонент для замены JEditorPane для повышения производительности?

Это пример, который может показать увеличение памяти и использование процессора.

    public class TestCPU extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestCPU frame = new TestCPU();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TestCPU() {
        setIconImage(Toolkit.getDefaultToolkit().getImage(TestCPU.class.getResource("/images/asd.png")));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        gbl_contentPane.columnWidths = new int[]{0, 0};
        gbl_contentPane.rowHeights = new int[]{0, 0};
        gbl_contentPane.columnWeights = new double[]{1.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{1.0, Double.MIN_VALUE};
        contentPane.setLayout(gbl_contentPane);

        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 0;
        contentPane.add(scrollPane, gbc_scrollPane);

        JEditorPane editorPane = new JEditorPane();
        editorPane.setContentType("text/html");
        String html = "<html>";
        for (int i = 0; i < 500; i++) {
            html = html + "<img src="+ TestCPU.class.getResource("/images/asd.gif") + ">";
        }
        editorPane.setText(html);
        scrollPane.setViewportView(editorPane);
    }
}

изображение, использованное в тесте

...