在 Java 中启用 OpenGL 会使带有图形的 JPanel 的边缘被切断

Enabling OpenGL in Java makes edges of JPanel with graphics get cut off

我正在为一项学校作业使用 Java Graphics2D 制作游戏。当我将以下行添加到我的主要方法的开头以提高性能时,

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

图形面板的边缘被切断。

我做了个小程序展示一下效果:

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

public class Main extends JPanel {

    public Main() {
        JFrame frame = new JFrame("OpenGL off");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        setPreferredSize(new Dimension(800, 600));
    
        frame.add(this);
        frame.pack();
        frame.setVisible(true);
    }

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;

        g2.setPaint(Color.RED);
        g2.setStroke(new BasicStroke(5.0f));
        g2.draw(new Ellipse2D.Double(0, 0, 800, 600));
    }

    public static void main(String[] args) {
        // Enables hardware acceleration
        System.setProperty("sun.java2d.opengl", "true");
    
        new Main();
    }
}

没有 OpenGL:

OpenGL 启用:

问题出现在 Windows 而不是 Mac。

Java版本:Java11,OS:Windows10

编辑:Java 14

也会出现此问题

我发现 Oracle 的一些文档说 此命令可能不适用于某些硬件配置或 java 版本。 它更方便,因为您说,您可能只是将它与错误版本的 Java 或不支持此命令的版本一起使用。 我建议您查看此文档: https://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html 您可能需要 升级您的 Java 版本 或者 使用您的 MAC OS 因为这似乎工作顺利。我建议阅读文档,因为它有一些可靠的信息。长话短说,这可能是您的问题,您应该进行研究以找到替代方案或解决问题。我也是一名处于编程生涯初期的学生,我刚刚决定尝试解决一个问题,希望我能帮到你?