' Calendar.getDisplayName'给予' IllegalArgumentException n#39;与“未知来源”#39;

时间:2014-05-09 12:11:58

标签: java calendar illegalargumentexception

问题 - 我的应用程序在几百台计算机的生产环境中使用。在安装一些新计算机并发现我的应用程序仅在新计算机上崩溃之后出现了这个问题。新计算机附带JAVA v8u5,试图修复我也安装了v7u55的问题(我认为这可能是一个版本问题)。 注*我正在使用JDK v7u45进行编译**

根本原因 - 失败的代码是对Calendar.getDisplayName(int, int, Locale)

的调用

代码失败:

        System.out.println("Getting calendar instance");
        Calendar instanceCalendarObj = Calendar.getInstance();
        String date = instanceCalendarObj.getDisplayName(Calendar.MONTH, 0, Locale.ENGLISH);
        date = date.concat(" "+String.valueOf(instanceCalendarObj.get(Calendar.DAY_OF_MONTH)));
        date = date.concat(", "+String.valueOf(instanceCalendarObj.get(Calendar.YEAR)));
        JOptionPane.showMessageDialog(this, date);

错误讯息:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
    at java.util.Calendar.checkDisplayNameParams(Unknown Source)
    at java.util.Calendar.getDisplayName(Unknown Source)

任何帮助都会非常感激,即使它只是一种解决方法。

1 个答案:

答案 0 :(得分:2)

您将错误的参数传递给getDisplayName()方法。

第二个参数是样式,其可能的值为Calendar.SHORTCalendar.LONG。使用这些常量如下所示:

Calendar c = Calendar.getInstance();
c.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH);
c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);

顺便说一句,Calendar.SHORTCalendar.LONG的常量值是1和2(并且在代码中传递了0)。但总是使用常量名称而不是它们的值!