You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK 13中JOptionPane按钮无法本地化问题求助

JOptionPane按钮本地化在JDK 13失效的解决方案

我来帮你解决这个问题——JDK 13里JOptionPane无法显示西班牙语(墨西哥)本地化按钮的情况,确实和JDK 9引入的模块化系统以及Locale加载逻辑变化有关,咱们一步步拆解:

最快速的修复:显式设置JOptionPane的Locale

你代码里注释掉的JOptionPane.setDefaultLocale(locale);就是关键!在JDK 8中,设置系统默认Locale会自动同步到Swing组件,但从JDK 9开始,Swing组件的Locale和系统默认Locale的绑定关系被弱化了,必须显式给组件指定Locale才能生效。

把注释取消,修改后的代码如下:

public class test { 
    public static void main(String... args) { 
        Locale locale = Locale.forLanguageTag("es-MX"); 
        Locale.setDefault(locale); 
        JOptionPane.setDefaultLocale(locale); // 取消这行注释
        JOptionPane.showConfirmDialog(null, "did it work?"); 
    } 
}

运行这段代码,你应该就能看到西班牙语的按钮文本了。

关于ResourceBundle的疑问解答

你猜的没错,JOptionPane确实依赖JDK自带的ResourceBundle加载本地化字符串,完全不需要自己从头创建。它使用的资源包路径是javax.swing.plaf.basic.resources.basic,属于java.desktop模块。

你可以用这段代码验证资源包是否能正常加载:

Locale locale = Locale.forLanguageTag("es-MX");
ResourceBundle bundle = ResourceBundle.getBundle("javax.swing.plaf.basic.resources.basic", locale);
System.out.println(bundle.getString("OptionPane.yesButtonText"));

如果输出是西班牙语的Sí,说明资源包存在且能正常加载,问题只是JOptionPane没用到指定的Locale;如果加载失败,大概率是你用的JDK是精简版(比如某些定制的JRE),缺少了es-MX的本地化资源,这种情况下换完整版本的OpenJDK/Oracle JDK即可解决。

模块化环境的额外注意事项

如果你的应用是模块化项目(有module-info.java),需要确保模块声明中依赖了java.desktop模块,否则会无法访问Swing的本地化资源:

module your.app.module {
    requires java.desktop;
}

内容的提问来源于stack exchange,提问作者LeedMx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:52:37