Java2D OpenGL 图形加速不工作
Java2D OpenGL graphics acceleration not working
我想将 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);
}
}
问题
上述代码的问题在于,它在 属性 "sun.java2d.opengl"
设置为 "true"
之前与 Swing class 交互。设置外观已经算作这样的交互。
验证问题
您可以通过将 属性 "sun.java2d.opengl"
设置为 "True"
而不是 "true"
来看到这一点。如 Java2D Properties Guide 中所述,这会导致 Java 在激活 OpenGL 图形加速时向控制台输出以下消息:
OpenGL pipeline enabled for default config on screen 0
执行 属性 设置为 "True"
的问题代码不会输出此消息。这表明OpenGL图形加速没有激活。
解决方案
要解决此问题,请在设置外观之前设置 属性。
替换这个
// set system look and feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// activate opengl
System.setProperty("sun.java2d.opengl", "true");
由此
// activate opengl
System.setProperty("sun.java2d.opengl", "True");
// set system look and feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
这会导致代码显示上面给出的调试消息,这表明确实激活了 OpenGL 图形加速。
我想将 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);
}
}
问题
上述代码的问题在于,它在 属性 "sun.java2d.opengl"
设置为 "true"
之前与 Swing class 交互。设置外观已经算作这样的交互。
验证问题
您可以通过将 属性 "sun.java2d.opengl"
设置为 "True"
而不是 "true"
来看到这一点。如 Java2D Properties Guide 中所述,这会导致 Java 在激活 OpenGL 图形加速时向控制台输出以下消息:
OpenGL pipeline enabled for default config on screen 0
执行 属性 设置为 "True"
的问题代码不会输出此消息。这表明OpenGL图形加速没有激活。
解决方案
要解决此问题,请在设置外观之前设置 属性。
替换这个
// set system look and feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// activate opengl
System.setProperty("sun.java2d.opengl", "true");
由此
// activate opengl
System.setProperty("sun.java2d.opengl", "True");
// set system look and feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
这会导致代码显示上面给出的调试消息,这表明确实激活了 OpenGL 图形加速。