6tail / lunar-java

日历、公历(阳历)、农历(阴历、老黄历)、佛历、道历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.
http://6tail.cn/calendar/api.html
MIT License
667 stars 152 forks source link

java.lang.NoClassDefFoundError: com.nlf.calendar.I18n #33

Open fungsgithub opened 1 year ago

fungsgithub commented 1 year ago

1.3.1 后的版本出现这个错误

6tail commented 1 year ago

换1.6.2试试。

huaxuanHan commented 1 year ago

1.6.2仍然出现这个问题 java.lang.ExceptionInInitializerError at com.nlf.calendar.I18n.getMessage(I18n.java:1716) at com.nlf.calendar.Lunar.computeYear(Lunar.java:257) at com.nlf.calendar.Lunar.compute(Lunar.java:390) at com.nlf.calendar.Lunar.(Lunar.java:205) at com.nlf.calendar.Solar.getLunar(Solar.java:532)

6tail commented 1 year ago

1.6.2仍然出现这个问题 java.lang.ExceptionInInitializerError at com.nlf.calendar.I18n.getMessage(I18n.java:1716) at com.nlf.calendar.Lunar.computeYear(Lunar.java:257) at com.nlf.calendar.Lunar.compute(Lunar.java:390) at com.nlf.calendar.Lunar.(Lunar.java:205) at com.nlf.calendar.Solar.getLunar(Solar.java:532)

你是怎么调用时出现的?能给出调用代码吗?我无法重现。

huaxuanHan commented 1 year ago

我也有点搞不明白这个问题是怎么出现的,我从1.4.7开始用的吧,就是我自己练手的一个小程序,从1.4.7开始,你更新,我就更新,但是五一假期时候,就五一当天,我打开发现程序闪退了,,昨天上班之后我打开项目调试发现就提示这个问题,不知道为啥以前没出现,我确定五一之前程序装到我手机上是没问题的,就五一打开就报错,代码段如下:for (int i = 0; i < days.get(0).getWeek(); i++) { //填充空白的 Map<String, Object> map = new HashMap<String, Object>(); map.put("weekday", ""); map.put("isThisMonth", "0");

        map.put("yangli", days.get(0).next(-days.get(0).getWeek() + i).getDay());
        DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");

        Date date = null;
        try {
            date = fmt.parse(days.get(0).next(-days.get(0).getWeek() + i).toString());
        } catch (ParseException e) {
            date = new Date();
        }

        Solar solar = Solar.fromDate(date);
        Log.i("每月每天1111", solar.toString());

        Holiday hol = HolidayUtil.getHoliday(solar.getYear(),solar.getMonth(),solar.getDay());
        if(hol != null)
        {
            map.put("holiday", hol.isWork() + "");
        } else {
            map.put("holiday", "");
        }

        String nowDay = "0";
        if(now.toYmd().equals(solar.toString()))
        {
            nowDay = "1";
        }

// 转阴历 map.put("isNowDay", nowDay); Lunar lunar = solar.getLunar(); if("初一".equals(lunar.getDayInChinese())) { map.put("nongli", lunar.getMonthInChinese() + "月"); } else { map.put("nongli", lunar.getDayInChinese() + ""); } List l = lunar.getDayYi(); String yi = "宜:"; for (String s:l){ yi = yi + " " + s; } // 忌 l = lunar.getDayJi(); String ji = "忌:"; for (String s:l){ ji = ji + " " + s; }

        listitem.add(map);

        Yiji yiji_temp = new Yiji();
        yiji_temp.setmonth(solar.getMonth() + "");
        yiji_temp.setday(solar.getDay() + "");
        yiji_temp.setyi(yi);
        yiji_temp.setji(ji);
        yiji_temp.setisNowDay(nowDay);
        list_yiji.add(yiji_temp);
    }

前面获取的阳历正常,转阴历报错了,我用的JDK11

huaxuanHan commented 1 year ago

写错了,我从1.3.1开始用的,刚才又试了一下1.3.1,1.3.1没问题,我再把1.3.1以后的每个版本都试一遍

huaxuanHan commented 1 year ago

测试完了,1.3.x都没问题,到1.6.0开始出现的这个问题 Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 11 {(.[^}]*)} at com.android.icu.util.regex.PatternNative.compileImpl(Native Method) at com.android.icu.util.regex.PatternNative.(PatternNative.java:53) at com.android.icu.util.regex.PatternNative.create(PatternNative.java:49) at java.util.regex.Pattern.compile(Pattern.java:1446) at java.util.regex.Pattern.(Pattern.java:1421) at java.util.regex.Pattern.compile(Pattern.java:972) at com.nlf.calendar.I18n.(I18n.java:21)

6tail commented 1 year ago

你先用1.6.0以前的版本吧,看样子是1.6.0引入的多语言,使用正则表达式不支持Android引起的。

huaxuanHan commented 1 year ago

应该是的

6tail commented 1 year ago

v1.6.3 修复了这个问题。

huaxuanHan commented 1 year ago

测试新版可用,感谢