Java2D OpenGL 图形加速不起作用

Ste*_*ase 4 java opengl swing look-and-feel

我想将 Swing 与 Java2D OpenGL 图形加速一起使用。然而,它不起作用。

我自己回答了这个问题,因为我寻找解决方案很长一段时间。

这是我的代码:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class OpenGLTest {
    public static void main(String[] args) throws ClassNotFoundException,
            InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        // set system look and feel
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        // activate opengl
        System.setProperty("sun.java2d.opengl", "true");

        // create and show the GUI in the event dispatch thread
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame();
        frame.setTitle("OpenGL Test");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ase 5

问题

上述代码的问题在于,它在属性"sun.java2d.opengl"设置为 之前与 Swing 类进行交互"true"。设置外观和感觉已经算作这样的交互。

验证问题

您可以通过将属性设置"sun.java2d.opengl""True"而不是 来看到这一点"true"如Java2D 属性指南中所述,这会导致 Java 在激活 OpenGL 图形加速时向控制台输出以下消息:

OpenGL pipeline enabled for default config on screen 0
Run Code Online (Sandbox Code Playgroud)

在属性设置为 的情况下执行问题中的代码"True"不会输出此消息。这表明OpenGL图形加速没有激活。

解决方案

要解决此问题,请在设置外观之前设置属性。

替换这个

        // set system look and feel
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        // activate opengl
        System.setProperty("sun.java2d.opengl", "true");
Run Code Online (Sandbox Code Playgroud)

这样

        // activate opengl
        System.setProperty("sun.java2d.opengl", "True");

        // set system look and feel
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Run Code Online (Sandbox Code Playgroud)

这会导致代码显示上面给出的调试消息,这表明 OpenGL 图形加速确实已激活。

  • “-D”参数本质上与“setProperty”方法相同。但是,并不总是可以使用该参数。例如,如果您提供一个可执行 jar 文件,但没有安装程序,也没有针对每个操作系统的附加启动脚本。 (2认同)