我们最近升级了一个应用程序,该应用程序一直使用 Java 8,但在此过程中升级到了 Java 11。
现在我们面临以下问题:
- 用户正在使用 HiDPI 笔记本电脑(145 DPI)
- 用户将 Windows 10 选项“缩放和布局”->“更改文本、应用程序和其他项目的大小”设置为 125%,以提高可读性
- 该应用程序根本无法扩展,因为它不具备 DPI 感知能力(它开发时根本没有考虑 HiDPI),因此它太小,无法在 15 英寸笔记本电脑上使用
- 更改此应用程序的 Windows 设置后(“兼容性” -> “更改高 DPI 设置” -> “覆盖高 DPI 缩放行为” -> “系统”),应用程序确实缩放到 125%,但外观变得模糊
现在,我发现从 Java 8 到 Java 11,JRE 决定告诉 Windows 所有应用程序都是“DPI 感知的”,但这个应用程序在开发时并没有考虑到 HiDPI。
令我感到困惑的是,在 Java 8 上运行时,旧版本的软件并没有出现模糊的 GUI。这是因为 Windows 10 设置“显示设置”->“高级缩放设置”->“修复应用程序缩放”(我已经证实了这一点)
我还发现,在 Java 8 和 Java 11 之间,高 DPI 的缩放阈值从 150% 降低到了 125%。
因此,我的结论是,由于缩放阈值,Java 11 RE 会告诉 Windows 此应用程序是 DPI 感知的。由于情况并非如此,我们手动告诉 Windows 系统应缩放此应用程序(通过覆盖高 DPI 缩放行为并将其设置为“系统”)。现在,有没有办法专门指示 Windows 对此应用程序应用“修复应用程序缩放”?出于某种原因,使用“系统”覆盖 HiDPI 行为 Windows 只会通过相应地拉伸位图来缩放应用程序,从而导致 GUI 模糊。