[Java讨论] 关于win10上配置java13或其它高版本后swing组件无法适配高分辨率的问题

在win10上用jdk13开发GUI程序,会发现界面的缩放比不对,可以通过如下代码测试:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = (ge.getScreenDevices())[0];
GraphicsConfiguration gc = gs.getConfigurations()[0];
//之后调用Toolkit对象(可以getDefaultToolkit()获取)的getScreenSize()方法无法获得正确的屏幕分辨率

找了好多解决方法,其中说的最多的就是指定java.exe/javaw.exe等的高分辨率兼容性,实测该方法对win10,java13无效,原因如下:
GraphicsDevice在java中为一个抽象类,在java8和java13中二者继承树不同.在win10,java13中,由Win32GraphicsDevice类来实现GraphicsDevice中所有的抽象方法,该类的setNativeScale(…)方法被声明为native,即,如果需要调节缩放比,需要’覆盖’一个native方法.
java中的native方法的’覆盖’只能通过手动覆盖dll文件实现,所以大多数针对java8的办法无法解决java13的GUI分辨率问题.
(此问题待解决)

更新:此问题已解决
通过添加JVM参数限制dpi自适应及UI缩放即可 参数及对应值为 -Dsun.java2d.dpiaware=false -Dsun.java2d.uiScale=1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值