如何在 linux 中的高 dpi 显示器上修复基于 Java 的应用程序的缩放?

Ser*_*gio 7 java linux scaling swing highdpi

我刚刚切换到 java 11 (AdaptOpenJDK),以便我的 java Swing 应用程序在不同系统缩放设置下的高 dpi 显示器上看起来不错。

它在 Windows 上运行正常。无论系统上配置的缩放值如何,java 都会自动检测它并使用它来相应地缩放 GUI。

然而,在 Linux 上,GUI 不考虑系统缩放,因此,它在高 dpi 显示器上看起来很小。

在这里阅读了一些帖子后,我发现我可以指示 java 要使用什么缩放值。例如,如果系统缩放为 200%,那么我可以将以下命令行参数添加到用于启动应用程序的 java 命令中。

-Dsun.java2d.uiScale=2.0

当我添加上面的命令行选项时,GUI 在 linux 上看起来不错。

我还读到我可以设置 GDK_SCALE 环境变量。

但是,我想找到更好的解决方案。理想情况下,我不需要指定要使用的缩放值。有谁知道这是否可能?

如果上述不可能,那么我想我的下一步将是在 linux 中提出一个命令,该命令返回当前系统缩放值是什么,并使用它来设置sun.java2d.uiScale选项。

任何帮助表示赞赏。

谢谢。

小智 -4

你可以试试这个:

-Dsun.java2d.ddscale=true
Run Code Online (Sandbox Code Playgroud)

正如官方文档所说:

如果正在使用 DirectDraw/Direct3D 管道,则将此标志设置为 true 可启用硬件加速缩放。默认情况下禁用 DirectDraw/Direct3D 硬件缩放,以避免现有应用程序中出现渲染瑕疵。

更多信息可以查看Oracle官方关于系统属性的文档

  • 这是指Java 7文档,不适用于问题所涉及的情况。 (2认同)