Jlink打包应用后NumberFormat指定意大利格式失效如何修复
问题原因
jlink 构建自定义JRE镜像时默认仅包含根地区(美国英语)的本地化资源,意大利等非默认地区的数字格式化规则没有被打包进最终镜像,运行时找不到对应地区资源就会自动回退到US格式,导致打包后格式化规则失效。
解决方案
步骤1:添加地区数据模块依赖
在你的项目module-info.java中引入jdk.localedata模块:
module com.example.demo4 { requires javafx.controls; requires javafx.fxml; requires jdk.localedata; // 新增这行,引入地区数据模块 opens com.example.demo4 to javafx.fxml; exports com.example.demo4; }
步骤2:修改jlink打包配置
在build.gradle的jlink配置项中,新增参数指定要打包的地区:
jlink { jpackage{ imageOptions = ["--icon", "C:/demo4/src/main/resources/com/example/demo4/Icon.ico"] } // 新增--add-modules jdk.localedata 和 --include-locales参数,指定要包含的意大利地区 options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages', '--add-modules', 'jdk.localedata', '--include-locales', 'it'] launcher { name = 'Karrty' } }
如果后续需要支持多个地区,直接在--include-locales参数后用逗号分隔添加即可,例如'it,fr,zh-CN'。
修改完成后重新执行jlink打包,生成的exe运行时就会正确显示意大利格式的数字。
内容的提问来源于stack exchange,提问作者Youssef Idraiss
相关产品推荐
相关产品推荐

