Java:构造Locale对象时NullPointerException引起的ExceptionInInitializerError

2024-03-13

我正在为我和其他几个人编写的程序进行本地化。大多数字符串现在以适当的语言从 ini 文件加载。我正在尝试对程序中的货币格式执行相同的操作。但是,当我尝试启动应用程序时,我就会收到运行时异常。

我使用 Locale 对象作为一些 NumberFormat.getCurrencyInstance() 的参数,如下所示:

private static final NumberFormat decf;
static 
{
    decf = NumberFormat.getCurrencyInstance(Lang.cLocale);
    decf.setRoundingMode(RoundingMode.HALF_UP);
}

Lang 是包含所有本地化内容的类。 IDE 在尝试运行时抱怨的代码是public static Locale cLocale = new Locale(GUI.DB_info[19],GUI.DB_info[20]);

GUI 是包含 GUI 的类,我们决定在其中构造 DB_info 数组(它本身只包含从另一个类中的远程数据库加载的信息)。 DB_info[19] 是语言代码(现在是),DB_info[20] 是国家代码(美国)。数组元素正在被正确填充——或者说,我现在无法深入了解程序来判断;但填充 DB_info 的代码没有任何改变。

完整的异常如下:

Exception in thread "main" java.lang.ExceptionInInitializerError
at greetingCard.GUI.<clinit>(GUI.java:118)
Caused by: java.lang.NullPointerException
at java.util.Locale.<init>(Unknown Source)
at java.util.Locale.<init>(Unknown Source)
at greetingCard.Lang.<clinit>(Lang.java:13)
... 1 more

GUI 中引用的行是:static String welcome = Lang.L_WELCOME + ", " + empName;,而 Lang.java 基本上看起来像这样:

// Set locale for currency display
public static Locale cLocale = new Locale(GUI.DB_info[19],GUI.DB_info[20]); // language, country

// Employee specific strings
public static String L_AMT_REMAIN = "";
public static String L_AMT_TEND = "";
public static String L_APPROVED = "";
public static String L_ARE_YOU_SURE = "";
[...]

public static void Main(String emp_lang)
{
    String header = "";

    if (emp_lang.equals("ENG"))
    {
        header = "ENG";
    }
    else if (emp_lang.equals("SPA"))
    {
        header = "SPA";
    }
    else if (emp_lang.equals("FRE"))
    {
        header = "FRE";
    }
    else if (emp_lang.equals("GER"))
    {
        header = "GER";
    }
    else
    {
        header = "ENG";
    }

    try 
    {
        Ini ini = new Ini(new File("C:/lang.ini"));

        L_AMT_REMAIN = ini.get(header, "L_AMT_REMAIN");
        L_AMT_TEND = ini.get(header, "L_AMT_TEND");
        L_APPROVED = ini.get(header, "L_APPROVED");
        L_ARE_YOU_SURE = ini.get(header, "L_ARE_YOU_SURE");
                    [...]
                                L_WELCOME = ini.get(header, "L_WELCOME");
        L_WELCOME2 = ini.get(header, "L_WELCOME2");
        L_XACT_CHNG = ini.get(header, "L_XACT_CHNG");  
        L_YES = ini.get(header, "L_YES");

        System.err.println("Employee Language: " + header);
    } 
    catch (InvalidFileFormatException e) 
    {
        e.printStackTrace();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
} // end public static void main

这是为了让大多数字符串以不同的语言显示。 Lang 内部还有另一个方法可以加载一些其他字符串,独立于第一个集合。我不认为它会影响这个问题,但如果需要的话我可以发布它。

这些类/方法的启动顺序如下: GUI.Main 调用 Login 类,该类调用 CreateLogin 方法。该方法调用 Clients.main,后者从传递给它的 GUI 获取 DB_info 数组。客户端填充 DB_info 数组。然后调用 Lang.other(以获取登录页面的特定于语言的字符串),并创建登录按钮和标签。登录成功后,登录员工的首选语言(从数据库)将传递到 Lang.main 以加载其他字符串(因此 emp_lang 在上面的代码中传递)。

在我添加 Locale 对象的代码之前,所有这些都工作正常。现在我收到 ExceptionInInitializerError 异常。有人知道发生了什么事吗?

顺便说一句,为了从 ini 文件加载,我使用 ini4j。我在谷歌搜索时发现的一些论坛帖子表明这是一个问题,但我不明白它与 Locale 对象的问题有什么关系。 ini 的东西工作得很好。


听起来你的静态初始化器中有一个循环,所以有些东西还没有初始化。

GUI calls Lang获取之前的静态初始值设定项Lang.L_WELCOME. Lang calls GUI第 2 行中的静态初始化程序。您的异常跟踪使其看起来像GUI calls Lang由于某种原因,静态初始化器。

总而言之,像这样的循环意味着有人将引用静态初始化的对象并获得null而不是他们期望得到的。在这种情况下,我怀疑Lang.java,第 2 行,经过两个null指向的指针Locale构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:构造Locale对象时NullPointerException引起的ExceptionInInitializerError 的相关文章

随机推荐

  • 发送密钥不起作用 selenium webdriver python

    我需要将文本发送到描述文本区域 有一些预定义的文本 单击后会被清除 我尝试在 sendkeys 之前使用 clear 或 click 但没有任何效果正常 它将向那里发送文本 但它仍然是灰色的 并且保存页面后出现错误 说明中没有文本 我可以使
  • 在 Java 中使用 String 和 Object 的 equals() 方法

    Object o1 new Object Object o2 new Object o1 o2 System out println o1 equals o2 它返回false 它可以返回true 如果评论被删除 为什么同样的事情不适用于S
  • 是否可以对我的 iPhone 应用程序进行逆向工程?

    我创建了一个 iPhone 应用程序 我想将编译后的 app 文件发送到我的客户端 以便他可以在他的设备上安装和测试这个 iPhone 应用程序 他是否有可能查看这个 app文件的内容 比如这个应用程序中使用的资源文件 图像 声音文件等 他
  • 在 PDF 中使用 Javascript 列出 XFA 对象的属性

    我正在尝试创建一个包含多个文本字段的 PDF 文档 这些文本字段的高度可以增长到某个最大值 由于项目的限制 我使用的是 Adob e Designer 7 它很高兴允许使用 Javascript 然而 XFA 中的对象与 HTML DOM
  • 验证不适用于 EntityManager.merge()

    我对我的实体几乎没有验证 例如 NotNull 还有一些一代人 比如 Id GeneratedValue strategy AUTO Column name ID private Long id Column GeneratedValue
  • 如何通过 CloudFront 将对象放入 S3

    我想通过 CloudFront 将图像上传到 S3 如果你看到关于CloudFront的文档 你可以发现cloud front提供了put方法来上传到cloudFront 可能会有人问我为什么使用云端上传到S3 如果你搜索一下 你就能找到解
  • 运算符和操作数的排列算法

    我在一个面试网站上看到了这个问题 我们有 4 个数字 即 n1 n2 n3 n4 我们可以将它们放置在任何 顺序 我们可以在它们之间使用数学运算符 最终结果为 24 为此编写一个算法 需要 4 个数字并返回 false 或 true 最终结
  • Eclipse 给出错误,最近更新后缺少 R.java 文件

    我已经更新了我的SDK and ADT到最新版本 我也更新了Eclipse to Kepler最新一篇之后Juno My ADT版本是22 0 在此更新之后 当我创建新项目时 出现错误 指出R cannot be resolved to a
  • 编写一个http嗅探器

    我想编写一个程序来通过数据包捕获提取系统访问的网站的 URL IP 地址 我认为该 URL 将出现在数据部分中 即不在任何标头中 ethernet ip tcp udp 此类程序有时称为http嗅探器 我不应该使用任何可用的工具 作为初学者
  • 无法解析 IntelliJ Idea IDE 中的符号 javafx.application

    我尝试创建一个JavaFXIntelliJ Idea IDE 中的应用程序 但我收到编译错误 java 包 javafx application 不存在 我已将项目 SDK 和项目语言级别更改为 Java 8 重新加载项目 但没有帮助 然后
  • 如何给 TriangleMesh 中的一些三角形着色?

    我想用不同的颜色为 TriangleMesh 的一些三角形着色 最简单的方法是什么 甚至可以在 fxml 文件中实现 java代码 import javafx application Application import javafx fx
  • 以最小尺寸分割字符串

    我正在编写一个 python 脚本 它将接受点分隔的版本号 它将把这个字符串分成单独的部分 使用句点 作为分隔符 我的脚本最多支持 4 个组件 例如1 2 3 4 然而 用户可以指定less or more组件数量超过 4 个 我的脚本需要
  • 在 Bootstrap 3 导航栏上使用 NAV 和 DIV 有什么区别?

    在最新的 Bootstrap 3 导航栏的示例中 我在网络上找到了各种示例 其中外部导航栏标记是 div class navbar navbar default navbar static top div 和其他例子正在使用
  • Clang:错误:非静态数据成员的使用无效

    这个 gcc 是否过于友善并且做了开发人员认为它会做的事情 或者 clang 对某些事情过于挑剔 我是否遗漏了标准中的一些微妙规则 其中 clang 对此的抱怨实际上是正确的 或者我应该使用第二位代码 这基本上就是 offsetof 的工作
  • 如何在 Java 中将文件路径列表转换为 Hireachial 树

    有人可以给我一些建议吗 我想要获取文件路径列表 只是字符串 并转换为类似层次树的结构 因此有两个任务 解析字符串以创建树 以及创建树或某种映射结构以实际将结果放入其中 第三个任务是解析树以在 html 中显示为树 我使用的是 Java 7
  • Laravel中保存模型时直接设置ID和设置eloquent关联关系有什么区别?

    我有两张桌子 employees and employee types employees有以下字段 id PK 员工类型 ID 外籍 name and employee type有以下字段 id PK title 我雄辩的模型函数是 Em
  • GLSL 版本变更日志?

    我可以在哪里阅读有关 GLSL 从版本 1 1 到 1 2 以及从 1 2 到 1 3 所做的更改和添加的信息吗 谷歌似乎对此不知所措 我真的不想开始阅读完整的规范 1 3版 http www opengl org registry doc
  • 无法将类型字符串用作 sql.NullString

    我正在创建一个gorm model Day is a corresponding day entry type Day struct gorm Model Dateday string json dateday gorm type date
  • 带约束的 Psql COPY 失败

    我在服务器中有一个这样的表 CREATE TABLE example table id BIGSERIAL PRIMARY KEY name VARCHAR 70 NOT NULL status VARCHAR 70 NOT NULL CO
  • Java:构造Locale对象时NullPointerException引起的ExceptionInInitializerError

    我正在为我和其他几个人编写的程序进行本地化 大多数字符串现在以适当的语言从 ini 文件加载 我正在尝试对程序中的货币格式执行相同的操作 但是 当我尝试启动应用程序时 我就会收到运行时异常 我使用 Locale 对象作为一些 NumberF