3

我使用定制的渲染器为我的 8 位计算机模拟器重新缩放屏幕,该模拟器在 Java 9 之前的环境中运行良好。在 Java 9 中,当 JVM 自动调整屏幕大小以适应不同的分辨率时,它会在主屏幕上产生三角形失真。在模拟器中启用扫描线时最为明显。我怀疑它与这个 ==> http://openjdk.java.net/jeps/263在 Java 9 中交付有关。

例如,在 Windows 10 上使用 Java 9 在 4K 显示器上执行以下程序时可以看到效果。

public static void main(String[] args){
    JFrame frame=new JFrame("Java version 9");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    BufferedImage image =new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
    Graphics2D g=image.createGraphics();
    g.setColor(Color.WHITE);
    for(int y=0;y<image.getHeight();y+=2){
        g.drawLine(0,y,image.getWidth(),y);
    }
    g.dispose();
    ImageIcon imageIcon=new ImageIcon(image);
    JLabel label=new JLabel(imageIcon);
    frame.add(label);
    frame.pack();
    frame.setVisible(true);
}

图1 在此处输入图像描述

以下是使用 JDK 1.8.0_144 时相同程序的外观,这是期望的结果。

图 2。 在此处输入图像描述

有没有办法在 Java 9 中禁用默认的自动重新缩放屏幕,这也与 Java 9 之前的环境兼容?

4

2 回答 2

1

使用选项 -Dsun.java2d.uiScale=1.0 修复了我提供的模拟器和测试程序的上述问题。我从Java 9 中的 JFrame 缩放中得到了答案。我更喜欢编程解决方案,并且针对特定面板禁用 jdk 9 高 dpi似乎与我的问题完全相同,并且那里提供的答案看起来很有希望。

于 2018-03-25T11:42:08.420 回答
1

请参阅https://bugs.openjdk.java.net/browse/JDK-8189416 这似乎是 JDK 中 Direct3D 代码中的错误。

解决方法是命令行上的“-Dsun.java2d.d3d=false”。

于 2017-10-18T17:03:52.477 回答