1. 程式人生 > >用ant執行時報錯“要了解詳細資訊,請使用-xlint:unchecked重新編譯”的解決方案

用ant執行時報錯“要了解詳細資訊,請使用-xlint:unchecked重新編譯”的解決方案

一、遇到問題:
用ant執行jasperreport的samples\charts示例的build.xml時,無法編譯,提示錯誤如下:
javac:
    [javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts
    [javac] 注意: E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts\ChartsApp.java 使用了未經檢查或不安全的操作。
    [javac] 注意: 要了解詳細資訊,請使用 -Xlint:unchecked 重新編譯。

二、查了一下資料,知道是泛型的原因,網上查到的解決方案主要有以下幾種:

1.編譯時帶上引數-source 1.4
2.使用@SupressWarnings("unchecked")註釋
3.更新你的程式碼,使用List<Object>. List<Object>的例項能接受任何型別的物件,就像是一個原型List。然而,編譯器不會報錯。
(以上三種方法來源:http://www.matrix.org.cn/resource/article/43/43634_java_generics.html)

4.如果你用的Ant,使用build.xml編譯的話,可以右擊build.xml檔案,
--> 執行 --> 構成和執行,選擇 引數,在《程式引數》裡面輸入-xlint:unchecked即可;

5.找到build.xml裡面類似的語句,加上一句話:
<!-- Java Compile -->
<target name="compile" depends="init">
<javac srcdir="src" destdir="${classdir}"
deprecation="on" encoding="Windows-31J" debug="on" includes="**/jp/**">
<compilerarg value="-Xlint:unchecked"/> `<!-- 就是這句話!! -->
<classpath refid="project.class.path" />
</javac>
</target>
(以上兩種方法來源:http://www.itwenku.com/java/12/47796.htm)

三、自己的試驗與結論

第一種:
“編譯時帶上引數-source 1.4”使用方法:
找到build.xml裡面類似的語句,加上一句話:
<javac srcdir="${src.dir}" destdir="${classes.dir}" >
<classpath refid="classpath"/>
<compilerarg line="-source 1.5"/> `<!-- 就是這句話!注意與第五種方式不同的是line標籤而不是value! -->
</javac>
編譯通過,charts下的報表出現了!

第二種:
“使用@SupressWarnings("unchecked")註釋”:
在ChartsApp.java的main函式前加上了這個註釋,但是沒有起作用,提示錯誤依然是“[javac] 注意: 要了解詳細資訊,請使用 -Xlint:unchecked 重新編譯。”,怎麼回事呢?

在一篇文章中找到了答案:
http://www.matrix.org.cn/resource/article/43/43864_Generic_Types.html
在撰寫本文時候,javac並不支援@SuppressWarnings 的註解。期望在Java 5.1中得到支援。

第三種:
更改程式碼為泛型使用方式:
原來的程式碼:
Map parameters = new HashMap();
parameters.put("MaxOrderID", new Integer(12500));

更改後的程式碼:
Map<String,Integer> parameters = new HashMap<String,Integer> ();
parameters.put("MaxOrderID", new Integer(12500));
或者:
Map<Object,Object> parameters = new HashMap<Object,Object> ();
parameters.put("MaxOrderID", new Integer(12500));

更改後,順利通過編譯,也能看到報表了!!

第四種:
經驗證無效;

第五種:
<javac srcdir="src" destdir="${classdir}"
deprecation="on" encoding="Windows-31J" debug="on" includes="**/jp/**">
<compilerarg value="-Xlint:unchecked"/> `<!-- 就是這句話!! -->
<classpath refid="project.class.path" />
</javac>

加上"<compilerarg value="-Xlint:unchecked"/>" 後,出現"警告",不過編譯順利通過,也能看到報表了!
編譯提示如下:
    [javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts
    [javac] E:\jiangcm\workspace-forict-myeclipse\jasperreports\demo\samples\charts\ChartsApp.java:115: 警告: [unchecked] 對作為普通型別 java.util.Map 的成員的 put(K,V) 的呼叫未經檢查
    [javac] parameters.put("MaxOrderID", new Integer(12500));
    [javac] ^
    [javac] 1 警告


呵呵,答案是豐富多彩的,條條大道通羅馬,這次不僅解決了問題,還找到了四種解決問題的方法。


參考資料:
1.J2SE 5.0中的泛型
作者:Budi Kurniawan
http://www.matrix.org.cn/resource/article/43/43634_java_generics.html
2.Eclipse中報jsp中有錯誤“要了解詳細資訊,請使用-xlint:unchecked重新編譯”,具體在選單上怎麼操作?
http://www.itwenku.com/java/12/47796.htm
3.泛型型別,第一部分
作者: David Flanagan
http://www.matrix.org.cn/resource/article/43/43864_Generic_Types.html
4.有關ant的faq
http://www.blogjava.net/luckyrobbie/articles/24117.html

Q. How to pass -Xlint or -Xlint:unchecked to 1.5 javac task?
A: pass it as compilerarg nested <compilerarg> to specify.

  <compilerarg value="-Xlint"/>
  <!-- or -->
  <compilerarg value="-Xlint:unchecked"/>

相關推薦

ant執行時報詳細資訊使用-xlint:unchecked重新編譯”的解決方案

一、遇到問題: 用ant執行jasperreport的samples\charts示例的build.xml時,無法編譯,提示錯誤如下: javac:     [javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\ja

vs程式執行時報"未能載入 SqlServerSpatialxxx.dll找不到指定的模組(異常來自......)"的解決方法

報錯原因: 因為程式中引用了Microsoft.SqlServer.Types程式集,正常情況下程式會去c:\windows\system32或者c:\windows\syswow64目錄中尋找,所以找不到。 其實你引用時已經在bin\debug\SqlServerTypes資料夾下生成了報

做IT想敏捷開發DevOps先搞懂專案管理再說

本文摘自“光環國際”—中國專案管理PMP培訓上市企業 什麼是專案管理? 你必須先把腦子裡那些描述專案管理的概念定義、各種管理的流程統統清零。拋開這些熟知的東西,跟著我好好琢磨琢磨:專案管理的本質,到底是個什麼東西。 多種管理方法頻出 在這樣一個如敏捷、DevO

springboot專案 釋出到linux環境執行,如:埠號錯誤無法連線redis的問題解決思路

org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisC

支付寶報“暫時無法獲取訂單資訊稍後再試”解決方法

這個問題在網上找到好多,說法五花八門,單沒有一個方法解決。最後一行一行的測試發現,原來這個錯誤的真正原因是。 total_amount付款金額不能是0! total_amount付款金額不能是0! total_amount付款金額不能是0!

Hashtable與ArrayListTest編譯問題:使用未經檢查或不安全的操作;使用 -Xlint:unchecked 重新編譯

ArrayList staff = new ArrayList(); Hashtable table = new Hashtable(); 在編譯java原始檔時,如果你的jdk是1.5或者以上,會出現“使用了未經檢查或不安全的操作;請使用 -Xlint:unchecked

JMeter學習(三十)non-gui模式執行 必須的一些資訊

必須要了解的一些資訊 既然是要通過non-gui模式執行,那麼我們就不得不去了解下在non-gui模式下jmeter命令的引數,下面是Jmeter官方文件中列出來的一些引數,中文註釋部分為我加入的解釋 -h, --help print usage inform

respondsToSelector的相關使用(非常好的方法一定!!!)

-(BOOL) isKindOfClass: classObj 用來判斷是否是某個類或其子類的例項 -(BOOL) isMemberOfClass: classObj 用來判斷是否是某個類的例項 -(BOOL) respondsToSelector: selector

今天寫一個簡單的helloworld執行時報

今天寫了一個最簡單的helloworld程式,但執行時總是報錯,說找不到類定義。檢查了大小寫都沒錯,注意JAVA在命令列下執行時引數是大小寫敏感的。最後在網上多方搜尋,終於得知罪魁禍首,原來是因為我的.java檔案儲存的

android NDK開發中Cygwin調試本地代碼時報“Another debug session running,Use --force to kill it”原因及解決的方法

能夠 att cati kill 時報 andro 使用 deb gdb調試 在使用ndk-gdb調試的時候。運行$NDK/ndk-gdb --verbose報錯“Another debug session running,Use --force to kil

初始化mysql數據庫 /usr/bin/mysql_install_db執行時報

class sql mysql post ins error 執行 color exec 錯誤描述: FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql

美國取消網絡中立你一下

網絡中立 cdn ISP 網絡遊戲 香港服務器 美國政府5月10日宣布,美國互聯網中立規定將在下個月廢除。 網絡中立(Net Neutrality)是2003年由美國哥倫比亞大學媒體法律學教授Tim Wu提出的“互聯網服務提供商(就是俗稱的ISP)必須同等對待來自各方的所有內容”,亦即禁止

呆萌直播源碼開發告訴您哪些是開發直播app中的原理

呆萌直播源碼開發告訴您哪些是開發直播ap呆萌直播源碼開發告訴您哪些是開發直播app中要了解的原理2018年是視頻直播可謂大火到不可預估未來的市場價值在哪裏。現在視頻直播領域裏面有不同的商家提供各種的商業解決方案,包括軟硬件設備,攝像機,編碼器,流媒體服務器等。那麽今天我要給大家在本文中分析講解的是如何在開發直

為什麽碼農業務?

貢獻 解決 模式 轉變 數據 關心 後來 改變 實現 最近一位分析界的老前輩對我很無奈地搖搖頭,“這幫程序員,不食人間煙火哪!”我也深有感觸,全世界的碼農都一個樣。 這讓我想起了,同樣也是他,在多年之前,對我提了警醒——要重視業務。從那之後,我一直狂奔在技術+業務的雙修道路

開發者一定的六款大數據采集平臺

lov 取數 序列 hbase 數據庫 選項 avr 情況下 定義      隨著大數據越來越被重視,數據采集的挑戰變的尤為突出。今天為大家介紹幾款數據采集平臺:   Apache Flume   Fluentd   Logstash   Chukwa   Scribe  

關於備份你必須的內容

二周 增量 進行 允許 文件 例如 簡便 價值 發現 冷備份:也被稱為離線備份,是指在關閉應用並且應用不能更新的狀況下進行的數據的完整備份 手動備份:要備份到其它磁盤上(避免本地故障,數據丟失) 自動備份:首次完整備份,以後備份為增量備份(例如:一個月備份一次,第一周為完整

如何防禦網站被ddos*** 首先什麽是流量***

進行 無法連接 正常 客戶 來講 watermark sdp row 什麽是 什麽是DDOS流量***?我們大多數人第一眼看到這個DDOS就覺得是英文的,有點難度,畢竟是國外的,其實簡單通俗來講,DDOS***是利用帶寬的流量來***服務器以及網站。 舉個例子,服務器目前帶

手機怎麼恢復通訊錄?換機之前你的小技巧

很多朋友在更換新手機之後,對於資料怎樣進行遷移會十分的頭疼,因為這其中涉及到的資料種類繁多。但是隨著技術發展的進步,也有越來越多的遷移方式可以供我們選擇。今天小編要來跟大家分享一下,在換了新手機之後,如何把舊手機的通訊錄恢復到新手機當中。 一、聯絡人存至SIM卡 這是早期很多朋友都會選

OpenCV在VS2015Release版本執行時報

OpenCV時英特爾的一個開源計算機視覺庫,在機器人視覺領域應用廣泛,特別是雙目視覺,vSLAM等領域。所謂“萬事開頭難”,學習OpenCV的童鞋們應該體會很深了!在Visual Studio中配置開發環境是一件瘋狂的事情,不同的人不同的機器出現的問題也是各不相同。就在今年國慶時,我還試了在Qt

零基礎轉行學python(學習方法學習效率如何就業)你

個人提醒大家幾點  一:盲目的去學  當初我在對於python這個行業什麼都不瞭解的情況下,比如:不知道未來發展趨勢,不知道學習python應該注意哪些初始問題,不知道具體的學習規劃學習路線等等,一味的買書看書,看視訊,到了中期階段萌生放棄的想法,和主要是因為覺得自己越學