我爱电脑技术论坛's Archiver

star2008 发表于 2008-4-3 07:36

Java开发工具Eclipse使用中报错的详细分析

Eclipse中报错“要了解详细信息,请使用-xlint:unchecked重新编译”的解决方案 u | y-T,h0iT

\3_2RN#J _Sm u7P
一、遇到问题: xYQj4maY

Q+W ~!}p 用ant执行jasperreport的samples\charts示例的build.xml时,无法编译,提示错误如下: K LW3N0?6p-z\S
/Mu\)p]k^
javac: Us~3Ad6r9s
]7}~3yy4D
[javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts
9[2Kr&\V'h)He
"M%{z;o(|8K7j [javac] 注意: E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts\ChartsApp.java 使用了未经检查或不安全的操作。
,r]"Z] Q ZAi H5@ {-N)@6v
[javac] 注意: 要了解详细信息,请使用 -Xlint:unchecked 重新编译。
AE6[s+F,k,{:ZD
~ l#\V%a'F G.U&\;qR
二、查了一下资料,知道是泛型的原因,网上查到的解决方案主要有以下几种: g G+i)B`5J)|)U

vle.~7Y ~ K/x V+f f0K n
1.编译时带上参数-source 1.4 i1sHy-B X\&z7r-D

4e4m*SV'_)S 2.使用@SupressWarnings("unchecked")注释 nD6Bn5s9J#X/c

%d6T7VPJAms;m2? 3.更新你的代码,使用List< Object>. List< Object>的实例能接受任何类型的对象,就像是一个原型List。然而,编译器不会报错。
:\*g*r;r5K $i ybB4Y
(以上三种方法来源:[url]http://www.matrix.org.cn/resource/article/43/43634_java_generics.html[/url])
Maq*Sq"T#@d T.Q5m,]d3RoL}
wpeI1LGVC
4.如果你用的Ant,使用build.xml编译的话,可以右击build.xml文件,
RX4{~jf| *QC1m:z!sv*Ci
--> 执行 --> 构成和执行,选择 参数,在《程序参数》里面输入-xlint:unchecked即可; "Zm \;N}-c R

4W7M I s#U-r5p/Fx9d(D }KkUKq
5.找到build.xml里面类似的语句,加上一句话: !gB.yv si*]Q

-N&C;PgRe%~#B < !-- Java Compile -->
%jx2ph!d9`By ~~:HWmaa5u ` no a
< target name="compile" depends="init">
@2fju[-F \9l h U[VV
< javac srcdir="src" destdir="${classdir}" 4Lj/W z!T%N2e\&t

^P3Rnvg T deprecation="on" encoding="Windows-31J" debug="on" includes="**/jp/**"> 0cFJ'k/p n%Iu

L-|w'NZ < compilerarg value="-Xlint:unchecked"/> `< !-- 就是这句话!! --> )Wpe`M+eMC7c~x!{
S:O s8||Df m#X4X0`
< classpath refid="project.class.path" />
4c m4q|-oM(f$u
t+F(OQ.{Ec]HyB? < /javac> ux _.a8`/e

$J d4{,K*\6{hF4__ < /target>
M"}6y4X{ ;@P,t%jY2\w`J
(以上两种方法来源:[url]http://www.itwenku.com/java/12/47796.htm[/url])
Z_:M/C x%QJ,@d R*Q 5BvdwHo7tL

L1`@$o#deQ 三、自己的试验与结论
5BO ^4@3glFfs
|:~+kQ T%_ +X%?5N"G$P%Z"hf
第一种: 1b!k i5`3Lk
"TU{ }(w
“编译时带上参数-source 1.4”使用方法:
z4Z || Q ^ s Y1J9}.s1XUP yH)P
找到build.xml里面类似的语句,加上一句话:
r7f4Z,^/b"`!R
{ [{_} < javac srcdir="${src.dir}" destdir="${classes.dir}" >
{x/M-Ys\7h?
w JusnN < classpath refid="classpath"/> |nFq| _9h-fb

2{%y9e/R O~ ag/[%B < compilerarg line="-source 1.5"/> `< !-- 就是这句话!注意与第五种方式不同的是line标签而不是value! --> 3hQ:u7Wq {qf
7y6nY*}f
< /javac> Vd&u?9Bd?-i

5B~&J7Bq,p%zW 编译通过,charts下的报表出现了!
ail3@x~v1]
I4?'I3DZ {H N vX_fc5qe)QB
第二种:
Z*U i@9_g(Q GXq@8X`f
“使用@SupressWarnings("unchecked")注释”: B:Swo4mE`:]&xp.sB
e;c7M&c.[U$A;lc
在ChartsApp.java的main函数前加上了这个注释,但是没有起作用,提示错误依然是“[javac] 注意: 要了解详细信息,请使用 -Xlint:unchecked 重新编译。”,怎么回事呢?
a+LP|!}4z'J EA4I7V^*S
J!]{+h:Mqt3T
在一篇文章中找到了答案: a |^8?*a5~!tN
Mv0X&I6~!_5uSP*}
[url]http://www.matrix.org.cn/resource/article/43/43864_Generic_Types.html[/url]
?-_~@#q o)|,t3yIz1S-`
在撰写本文时候,javac并不支持@SuppressWarnings 的注解。期望在Java 5.1中得到支持。
p\!j%x4W jb HEl2s YCq

&uAvAQ#G 第三种: BC[2UK#M
1XRAj {8Gs
更改代码为泛型使用方式: d/h6V'j/fso5f
5[U9~!t$GB6Y/p
原来的代码: *HF9vd(@,b/R8U

+wZu;lz0HN Map parameters = new HashMap();
V(x2Hqb&k$hE
9tlF+{9E/X5pW o parameters.put("MaxOrderID", new Integer(12500));
EUx8AR,\'Z7S
;qu {(PtD.E (J g:j'h'{8J9k_
更改后的代码: h"ELf^ ?
L7lHpfw-Bd
Map< String,Integer> parameters = new HashMap< String,Integer> ();
,Am]7c#Jc[3` "J&q/g bKG F.O5A
parameters.put("MaxOrderID", new Integer(12500)); \T3P-B+F

lVO%]g!~ 或者: |'B g b]O0YuW

tt:W:k.]fCN'@:E,A Map< Object,Object> parameters = new HashMap< Object,Object> ();
u}b K JK4R\ \!s&l0wHS;R6d!Ls
parameters.put("MaxOrderID", new Integer(12500)); i5M%` CF
$P6^e5[,JD*K

"^%V8hI6BX[.w$G 更改后,顺利通过编译,也能看到报表了!! N[#]@hJ r ]7m}

H,W)t)O*h9N@1y
"N^RXQwk6_4O4U+] 第四种:
J\e(E0@
hF'b2XX2J 经验证无效;
} C KxO G` n5b Gp g[b^ V1J

} v%G(y`I)b7g 第五种:
1|K,`8l4LX
e(_(E] U'E&p < javac srcdir="src" destdir="${classdir}" 1g:y]+cH kB&ZC%r

ho2_i/Yyi)S Q\C-L deprecation="on" encoding="Windows-31J" debug="on" includes="**/jp/**"> s@^,^CE4LL6F3F

3peKA"q < compilerarg value="-Xlint:unchecked"/> `< !-- 就是这句话!! -->
3K e4|5}-II f!F2l#d"t3o7V9N ^
< classpath refid="project.class.path" />
;ErbL6@-uc S]7@9Fw,RF
< /javac>
4_7`^VBq U/SQ\:U j.D#iA3{\
#SrB3?0el4q} Ch
加上"< compilerarg value="-Xlint:unchecked"/>" 后,出现"警告",不过编译顺利通过,也能看到报表了!
Nr7]W7wYh B 3H{U,KC5P ]2q
编译提示如下:
P1b'k5w b!`f #Y5] Rbfx/j9K
[javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts
gb#v m}
*R/}'b*GnB [javac] E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts\ChartsApp.java:115: 警告: [unchecked] 对作为普通类型 java.util.Map 的成员的 put(K,V) 的调用未经检查
2zK9Pa$Pw*@kt v4rE g7?
[javac] parameters.put("MaxOrderID", new Integer(12500));
CM9|,?l3Ff1n
z-LcJl6Z [javac] ^ $v axm6mX0Y*Q0Nm sz

Na~jI8KaCo5VT [javac] 1 警告 Y*MV&@Gb9x
:Fz ?e;]] `j&~;ndl
.I3p,k8t.Ek
呵呵,答案是丰富多彩的,条条大道通罗马,这次不仅解决了问题,还找到了四种解决问题的方法。 :AJ!P*n e t
:e/`2t?tq8M
5et Y{iY%S`'l
参考资料: E T2REB V

{[(YIlD3{Fb 1.J2SE 5.0中的泛型 *`;W iG"X2db4H

Z'{"N~+Mus_ f 作者:Budi Kurniawan 1[I r2e-pgES
rGc&}4{\
[url]http://www.matrix.org.cn/resource/article/43/43634_java_generics.html[/url]
5fN9E4]5b$D[8l -@\yFF
2.Eclipse中报jsp中有错误“要了解详细信息,请使用-xlint:unchecked重新编译”,具体在菜单上怎么操作? iDpxz9dg%t3[J

Zr ynVG [url]http://www.itwenku.com/java/12/47796.htm[/url]
:etz+HE
{:cn\4\ ILR 3.泛型类型,第一部分
9@)_;E!U w8svpwM
$y%u|:k| r3t;dg 作者: David Flanagan M}9V^2J!X5^s C

7C},i3tp R m]b{ [url]http://www.matrix.org.cn/resource/article/43/43864_Generic_Types.html[/url]
'IL5Wi,u*t Vz ]JU c8K*U
4.有关ant的faq
_8n$?$[|E
z{P}#?S [url]http://www.blogjava.net/luckyrobbie/articles/24117.html[/url] jf!Vw:P(G)hg0s
(~7g-j`1M1Y

"h{|h9mk/Y-X,My Q. How to pass -Xlint or -Xlint:unchecked to 1.5 javac task?
'YWf5`a@0q(?2R %D1oEj:}2E,d
A: pass it as compilerarg nested < compilerarg> to specify. kd$Uc r
lZoB'I,d]B%X

'R8?uf#p < compilerarg value="-Xlint"/> 5E2kR i O$q#^ YuM
5~v`HEgj1[$_;c!P
< !-- or --> "t9uX:Q:F0w4a

4b ug8u d x < compilerarg value="-Xlint:unchecked"/>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.