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

Posted

技术标签:

【中文标题】如何在 linux 的高 dpi 显示器上修复基于 java 的应用程序的缩放?【英文标题】:How to fix scaling of a java-based application on a high dpi display in linux? 【发布时间】:2020-03-01 03:36:21 【问题描述】:

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

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

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

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

-Dsun.java2d.uiScale=2.0

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

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

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

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

感谢任何帮助。

谢谢。

【问题讨论】:

貌似和这个问题有关:bugs.openjdk.java.net/browse/JDK-8260270 这不是java问题。这是“the”linux 显示管理器的问题。我还有一个高 dpi 显示器,这会导致 gui 的大小出现问题。因为我只用xorg,我用Xft.dpi: 140.Xresources做的(xrandr没用)以前的hdpi问题应该解决openjdk.java.net/jeps/263 【参考方案1】:

你可以试试这个:

-Dsun.java2d.ddscale=true

编辑:

正如官方文档所说,“如果 DirectDraw/Direct3D 管道正在使用,则将此标志设置为 true 可启用硬件加速缩放。DirectDraw/Direct3D 硬件缩放默认禁用以避免在现有应用程序中呈现伪影”

更多信息可以查看官方Oracle documentation about system properties。

【讨论】:

不管这有助于回答这个问题,请提供更多关于它的作用以及它如何解决手头问题的背景信息。简单地发布一段代码而没有解释会造成更多的混乱。 对不起,我的错。我添加了一个带有 Oracle 文档链接的描述,感谢您的建议 :) 不错。谢谢! 不幸的是,这对我不起作用。 这是指Java 7文档,不适用于问题所在的情况。

以上是关于如何在 linux 的高 dpi 显示器上修复基于 java 的应用程序的缩放?的主要内容,如果未能解决你的问题,请参考以下文章

linux (wayland) 上的 SoapUI - 高 DPI/4K 缩放问题

svg 图标在高 DPI 上出现像素化

linux中字体如何变大

Qt 应用程序中的高 dpi 缩放使图标变得平滑

Qt应用程序中的高dpi缩放使图标平滑

Windows 应用程序 - DPI 问题