我使用自定义渲染器来重新调整我的8位计算机模拟器的屏幕,这些模拟器在Java 9之前的环境中运行良好。在Java 9中,当JVM自动调整屏幕大小以适应不同的分辨率时,它会在主屏幕上创建三角形失真。在仿真器中启用扫描线时最明显。我怀疑它与此有关==> {9}以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 http://openjdk.java.net/jeps/263
以下是使用JDK 1.8.0_144的相同程序的外观,这是期望的结果。
是否有办法禁用Java 9中与Java 9前环境兼容的屏幕默认自动重新缩放?
答案 0 :(得分:1)
参见https://bugs.openjdk.java.net/browse/JDK-8189416 它似乎是JDK中Direct3D代码中的一个错误。
解决方法是&#34; -Dsun.java2d.d3d = false&#34;在命令行上。
答案 1 :(得分:1)
使用选项-Dsun.java2d.uiScale = 1.0修复了我提供的模拟器和测试程序的上述问题。我从JFrame scaling in Java 9得到了答案。我更喜欢程序化的解决方案,jdk 9 high dpi disable for specific panel似乎与我的问题完全一样,并且提供的答案看起来很有希望。