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

问题描述

我正在使用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,800,600));
    }

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

没有OpenGL:

OpenGL off

已启用OpenGL:

OpenGL on

该问题出现在Windows上,而不是Mac。

Java版本:Java 11,操作系统:Windows 10

编辑:Java 14也会出现此问题

解决方法

我找到了Oracle的一些文档,说该命令可能不适用于某些硬件配置或Java版本。正如您所说的,这更方便了,您可能只是将其与Java版本错误或不支持此命令。 我建议您阅读以下文档: https://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html 您可能需要升级您的Java版本,或者只是使用您的MAC OS ,因为这似乎效果很好。我建议阅读文档,因为其中包含一些扎实的信息。长话短说,这可能是您的问题,您应该进行研究以找到替代方案,或者只是解决。我也是一名刚开始编程生涯的学生,我只是决定尝试解决问题,希望对我有所帮助?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...