JFinal中使用QuartzPlugin报ClassCastException解决方法
JDK1.8中泛型反射修改对旧版本的影响
本文地址:http://blog.csdn.net/sushengmiyan 
本文作者:苏生米沿
问题复现环境:
JDK1.8
JFinal1.9
quartz2.2.1
启动环境可参考如下文章内容: https://my.oschina.net/u/147181/blog/664223
问题描述
JFinal配置好quartz的插件类后,启动报错。报错信息如下:
[ERROR]-[com.jfinal.core.Config.startPlugins()]: Plugin start error: com.jfinal.ext.plugin.quartz.QuartzPlugin.
org.quartz.CronScheduleBuilder cannot be cast to [Ljava.lang.Object;
java.lang.ClassCastException: org.quartz.CronScheduleBuilder cannot be cast to [Ljava.lang.Object;
    at com.jfinal.ext.plugin.quartz.QuartzPlugin.startJobs(QuartzPlugin.java:97)
    at com.jfinal.ext.plugin.quartz.QuartzPlugin.start(QuartzPlugin.java:64)
    at com.jfinal.core.Config.startPlugins(Config.java:87)
    at com.jfinal.core.Config.configJFinal(Config.java:48)
    at com.jfinal.core.JFinal.init(JFinal.java:67)
    at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
错误定位
temp=Reflect.on(temp).call(“withSchedule”,Reflect.on(“org.quartz.CronScheduleBuilder”).call(“cronSchedule”, jobCronExp).get()).get();
程序在此处抛出异常。
解决方式
将上述报错语句改为如下两句。
      CronScheduleBuilder csb = Reflect.on("org.quartz.CronScheduleBuilder").call("cronSchedule", jobCronExp).get();
      temp = Reflect.on(temp).call("withSchedule",csb).get();  
再次启动程序,不再报错。
错误来源:
JDK1.8对泛型的校验加强,此处插件使用的反射的方式来获取CronTrigger 在构造中需要一个CronScheduleBuilder类型的创建器,当按照错误定位的那句来写的时候,反射返回的类型是Object而TriggerBuilder的方法中需要的参数是一个泛型的CronScheduleBuilder类型。泛型检查报错ClassCastException。
扩展阅读:
以上来源-JDK8在泛型类型推导上的变化: 
http://lovestblog.cn/blog/2016/04/03/type-inference/
目录
JFinal中使用QuartzPlugin报ClassCastException解决方法的更多相关文章
- .vue文件在webstorm中es6语法报错解决方法
		
1 语法支持es6设置 Preferences > Languages & Frameworks > JavaScript 把 Javascript Language versio ...
 - @Data注解使用后在eclipse中get/set报错解决方法
		
Maven项目中已经导入相关的lombok.jar包但是使用后仍提示无set/get方法 安装完成之后,请确认eclipse安装路径下是否多了一个lombok.jar包,并且其 配置文件eclipse ...
 - java开发中遇到的问题及解决方法(持续更新)
		
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
 - SpringBoot拦截器中无法注入bean的解决方法
		
SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...
 - Loadrunner参数化逗号报错解决方法
		
Loadrunner参数化逗号报错解决方法 介绍Loadrunner参数化时,参数中包含有逗号时出错的解决方法. 在Loadrunner进行参数化时,参数中如果含有逗号,编辑保存后会报错: 此 ...
 - Android Studio  support 26.0.0-alpha1  Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法
		
AS下如何生成自定义的.jks签名文件, 以及如何生成数字签名 链接:http://www.cnblogs.com/smyhvae/p/4456420.html 链接:http://blog.csdn ...
 - 国内不fq安装K8S四: 安装过程中遇到的问题和解决方法
		
目录 4 安装过程中遇到的问题和解决方法 4.1 常见问题 4.2 常用的操作命令 4.3 比较好的博客 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国 ...
 - django.db.utils.InternalError: (1060, "Duplicate column name 'user_id'")迁移报错解决方法
		
django.db.utils.InternalError: (1060, "Duplicate column name 'user_id'")迁移报错解决方法 django.db ...
 - SpringCloud:eureka的'eurekaAutoServiceRegistration'报错解决方法
		
报错信息如下: org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with ...
 
随机推荐
- DVA框架统一处理所有页面的loading状态
			
dva 有一个管理 effects 执行的 hook,并基于此封装了 dva-loading 插件.通过这个插件,我们可以不必一遍遍地写 showLoading 和 hideLoading,当发起请求 ...
 - ls-dyna基础教程
			
刚刚开始使用ls-dyna,几天前还只知道点开dyna界面,然后就没有然后了,没人带,资料也没多少,但是科研还得继续往下做呀(手动滑稽),通过在仿真论坛上搜索相关的资料,并通过自己的一步步操作,做了大 ...
 - 扩展第二屏幕发生Out Of Range及扩展后耳机没声音解决方案
			
新年好\(^o^)/~ 拓展屏幕这种事情.其实很简单的.无非就分辨率跟刷新频率.有时候一接好就可以了.有时候怎么也弄不出来.我也是搞了蛮久.昨天突然弄通了.小记一下说不定能帮到同需求人. [设备] 主 ...
 - Python求解啤酒问题(携程2016笔试题)
			
问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升,并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的 ...
 - java基本数据类型的包装类
			
基本类型对应的包装类 byte(Byte).short(Short).int(Integer).long(Long).float(Float).double(Double).char(Characte ...
 - [LeetCode] Special Binary String 特殊的二进制字符串
			
Special binary strings are binary strings with the following two properties: The number of 0's is eq ...
 - Python网络爬虫笔记(五):下载、分析京东P20销售数据
			
(一) 分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1. 翻页的时候,谷歌F12的Network页签可以看到下面 ...
 - Centos常用命令之:文件与目录管理
			
在centos中常用的文件与目录操作命令有: ◇chmod:修改文件或目录的权限 ◇mkdir:新建目录◇rmdir:删除目录◇rm:删除目录或文件◇cp:复制目录或文件◇mv:移动目录或文件 下面就 ...
 - [SCOI 2016]美味
			
Description 题库链接 给你一个长度为 \(n\) 的序列 \(A\) . \(m\) 组询问 \((b,x,l,r)\) 询问 \[\max_{i=l}^r b\oplus (A_i+x) ...
 - [SHOI2001]化工厂装箱员
			
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...