问题 - 我的应用程序在几百台计算机的生产环境中使用。在安装一些新计算机并发现我的应用程序仅在新计算机上崩溃之后出现了这个问题。新计算机附带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)
任何帮助都会非常感激,即使它只是一种解决方法。
答案 0 :(得分:2)
您将错误的参数传递给getDisplayName()
方法。
第二个参数是样式,其可能的值为Calendar.SHORT
和Calendar.LONG
。使用这些常量如下所示:
Calendar c = Calendar.getInstance();
c.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH);
c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);
顺便说一句,Calendar.SHORT
和Calendar.LONG
的常量值是1和2(并且在代码中传递了0)。但总是使用常量名称而不是它们的值!