如何确定Java2D的uiScale缩放系数?
如何获取系统自动选定的sun.java2d.uiScale值
运行时获取生效的缩放系数
有两种场景的获取方式:
- 如果你要读取手动通过
-D参数传入的固定值,直接调用JDK系统属性API即可:String uiScaleVal = System.getProperty("sun.java2d.uiScale"); - 如果你要获取系统自动计算的最终生效缩放值,建议使用官方公开API读取,不受私有参数实现差异影响:
import java.awt.Toolkit; // 计算方式:系统DPI / 基准DPI(96) double effectiveScale = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0;
数值存储位置
- 手动传入的
sun.java2d.uiScale参数属于JVM进程级别的系统属性,仅存储在当前JVM进程的属性表中,进程结束后就会销毁,不会持久化写入本地文件。 - 系统自动选定的缩放值不会存在JDK侧的存储位置,是JVM启动时主动从操作系统的显示配置中动态读取计算得到的,对应不同系统的读取来源:
- Windows:读取系统设置→显示→缩放与布局的百分比值
- macOS:读取系统设置→显示器→缩放配置项
- Linux:读取当前桌面环境(GNOME/KDE/Xfce等)的全局缩放配置,或X11服务的DPI参数
注意:
sun.java2d.uiScale是Oracle/OpenJDK的私有实现参数,部分第三方JDK发行版可能未实现该参数,建议优先使用java.awt.Toolkit的公开API获取缩放值,兼容性更强。
内容的提问来源于stack exchange,提问作者Gianluca Corazza
相关产品推荐
相关产品推荐

