Низкая производительность Java в 2D - изменение размера

Я использую Windows 7 с Aero, и у меня очень быстрая видеокарта (Radeon 6870), которую я использую для игр.

У меня есть некоторые проблемы при изменении размера очень простых программ, которые я делаю с Ява. Например, эта программа абсолютно ничего не делает. У него нет слушателей действий, никаких циклов. Это просто графический интерфейс с кнопками.

Изменение размера с отключенным ускорением OpenGL:

[В полноэкранном режиме] Sluggish resizing

Изменение размера компонентов занимает около секунды. Для меня это очень заметно.

Изменение размера с ускорением OpenGL включено:

enter image description here

Я попытался включить ускорение OpenGl, чтобы решить эту проблему. Я скомпилировал JAR и запустите его с помощью java -Dsun.java2d.opengl = true -jar C: \ Test.jar . В результате немного меньше черных областей вокруг окна, но гораздо больше мерцания. На самом деле мерцание отображается серым на скриншоте выше.

Имеется ли проблема в каком-либо другом программном обеспечении?

Нет. Были протестированы Eclipse, Netbeans, Chrome и другие приложения. Ни у кого нет этой проблемы. Поэтому я должен заключить, что с кодом должна быть какая-то проблема. Различные люди запускали этот код и говорили, что у них «нет проблем». Если вы собираетесь протестировать его, убедитесь, что вы изменили размер окна с наименьшего размера до наибольшего размера экрана, перемещая мышь круговыми движениями.

Код:

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

public class JFrameWithButtonsTest {
    private int iScreen = 25;  
    private int iLocation = 10;
    JFrame frame = new JFrame();
    Container contentPane = frame.getContentPane();

    public JFrameWithButtonsTest() {
        JPanel northButtonPanel = new JPanel();
        northButtonPanel.setLayout(new GridLayout(2,2));
        northButtonPanel.add(new JButton(" I do nothing"));
        northButtonPanel.add(new JButton(" I do nothing"));
        northButtonPanel.add(new JButton(" I do nothing"));
        northButtonPanel.add(new JButton(" I do nothing"));
        contentPane.add(northButtonPanel, BorderLayout.NORTH);

        JPanel southButtonPanel = new JPanel();
        southButtonPanel.setLayout(new GridLayout(2,2));
        southButtonPanel.add(new JButton(" I do nothing"));
        southButtonPanel.add(new JButton(" I do nothing"));
        southButtonPanel.add(new JButton(" I do nothing"));
        southButtonPanel.add(new JButton(" I do nothing"));
        contentPane.add(southButtonPanel, BorderLayout.SOUTH);

        JPanel eastButtonPanel = new JPanel();
        eastButtonPanel.setLayout(new GridLayout(2,2));
        eastButtonPanel.add(new JButton(" I do nothing"));
        eastButtonPanel.add(new JButton(" I do nothing"));
        eastButtonPanel.add(new JButton(" I do nothing"));
        eastButtonPanel.add(new JButton(" I do nothing"));
        contentPane.add(eastButtonPanel, BorderLayout.EAST);

        boolean packFrame = false;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        frameSize.height = (int) (iScreen * screenSize.height / 100);
        frameSize.width = (int) (iScreen * screenSize.width / 100);
        frame.setSize(frameSize);
        frame.setLocation((screenSize.width - frameSize.width) / iLocation,
                (screenSize.height - frameSize.height) / iLocation);
        if (packFrame) {
            frame.pack();
            packFrame = true;
        } else {
            frame.validate();
        }
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new JFrameWithButtonsTest();
            }
        });
    }
}

Обратите внимание, что проблема все еще существует без этой строки: UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName ());

8
задан David 13 August 2011 в 11:37
поделиться