项目里用了开源验证码框架[url=http://jcaptcha.sourceforge.net/]JCaptcha[/url],它通过配置文件指定图片颜色,配置如下
[b]问题1[/b]
在jdk 1.5.08下没有问题,但是当升级到jdk 1.6.10时,初始化失败,报错显示为
java.awt.Color的constructor有两个
debug Color显示为,spring调用了//float 标识的构造方法,而不是期望的 //int
所以给参数加上类型参数 "type="java.lang.Integer",该解决了吧
出现新错误 [b]问题2[/b]
大意是,请指定参数类型,避免类型混淆
////////////////////// 解决过程
问题1:google之,找到 [url=http://blog.codecentric.de/en/2009/02/jdk6-spring-20-adventure/]一个先行者囧[/url] ;里面说到jdk5和jdk6(win下)Color类文件里的两个构造方法(上面列举的//float,//int)位置不同,导致spring选择了//float代替了期望中的//int方法
那,问题2是怎么回事呢?指定类型为什么spring没认出来呢?
问题2:debug spring加载过程,到这一句,真相大白
valueHolder.getType()-->“java.lang.Integer”
requiredType.getName()-->"int"
不相同,导致spring autowire 失败。。。
由于我们用的还是spring1.2,所以怀疑spring2.0是否已经修复了
==========补充
spring2.0下也存在,看来指定primary类型需谨慎
<bean id="softBlue" class="java.awt.Color" >
<constructor-arg index="0"><value>0</value></constructor-arg>
<constructor-arg index="1"><value>255</value></constructor-arg>
<constructor-arg index="2"><value>0</value></constructor-arg>
</bean>
[b]问题1[/b]
在jdk 1.5.08下没有问题,但是当升级到jdk 1.6.10时,初始化失败,报错显示为
java.lang.IllegalArgumentException: Color parameter outside of expected range: Red Green Blue
at java.awt.Color.testColorValueRange(Color.java:298)
at java.awt.Color.<init>(Color.java:382)
at java.awt.Color.<init>(Color.java:357)
java.awt.Color的constructor有两个
public Color(int r, int g, int b) //int
public Color(float r, float g, float b) //float
debug Color显示为,spring调用了//float 标识的构造方法,而不是期望的 //int
所以给参数加上类型参数 "type="java.lang.Integer",该解决了吧
<bean id="softBlue" class="java.awt.Color" >
<constructor-arg type="java.lang.Integer" index="0" ><value>0</value></constructor-arg>。。。
出现新错误 [b]问题2[/b]
...
.xml]: 3 constructor arguments specified but no matching constructor found in bean 'softBlue' (hint: specify index and/or type arguments for simple parameters to avoid type ambiguities)
大意是,请指定参数类型,避免类型混淆
////////////////////// 解决过程
问题1:google之,找到 [url=http://blog.codecentric.de/en/2009/02/jdk6-spring-20-adventure/]一个先行者囧[/url] ;里面说到jdk5和jdk6(win下)Color类文件里的两个构造方法(上面列举的//float,//int)位置不同,导致spring选择了//float代替了期望中的//int方法
那,问题2是怎么回事呢?指定类型为什么spring没认出来呢?
问题2:debug spring加载过程,到这一句,真相大白
if (valueHolder.getType().equals(requiredType.getName())) {
valueHolder.getType()-->“java.lang.Integer”
requiredType.getName()-->"int"
不相同,导致spring autowire 失败。。。
由于我们用的还是spring1.2,所以怀疑spring2.0是否已经修复了
==========补充
spring2.0下也存在,看来指定primary类型需谨慎