问题—我的应用程序用于跨几百台计算机的生产环境中。这个问题出现在安装了一些新电脑后,发现我的应用程序只在新电脑上崩溃。新电脑带有JAVA v8u5,为了解决这个问题,我还安装了v7u55(我认为这可能是一个版本问题)。*我正在编译使用JDK v7u45 **
根本原因-失败的代码是对日历的调用。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)
向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)。但是一定要使用常量名而不是它们的值!