2013-05-07 14 views
2

我從離開公司的開發人員繼承了一個項目。該項目是在Java中(我新),並使用碧玉報告(新的我)來生成一個PDF。我需要更新其中一個報告以刪除一些文字。如果我從源代碼控制中獲取代碼並運行它,它可以正常工作。但是,如果我打開其中一個jrxml文件並構建它而不做任何更改,那麼請嘗試再次運行該報告以使其中斷。我得到的錯誤是:賈斯珀報告打破建設(無編輯)

顯示java.lang.NullPointerException java.lang.Class.isAssignableFrom(本機方法) net.sf.jasperreports.engine.fill.JRFillTextField.getFormat(JRFillTextField.java: 706) net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:394) net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:368) net.sf.jasperreports .engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258) net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBan d(JRVerticalFiller.java:2036) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270) (JRVerticalFiller.java:128) net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946) net.sf.jasperreports.engine .fill.JRBaseFiller.fill(JRBaseFiller.java:845) net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:609) net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable .java:59) net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205) java.lang.Thread.run(未知源)

我不能爲我的生活找出錯誤意味着什麼或如何調試它。正如我上面所說,我沒有改變實際的報告。我所做的這一切都是在iReport中打開jrxml文件並構建它。如果我將jasper文件還原爲簽入的版本,則報告會再次開始工作。這份報告有一些子報告,我建立任何一個文件的文件都不會影響整個報告。

我不知道是否有幫助,但我調試的代碼,它快死了就行寫着:

bytes = JasperRunManager.runReportToPdf(...) 

編輯:我的碧玉報告JAR和我的iReport的版本是不同的版本。我爲我正在使用的版本的iRpeort添加了JAR(5.1.0),現在我得到一個新的錯誤。進展!錯誤是:

不能分配net.sf.jasperreports.engine.base.JRBaseTextField的實例字段類型net.sf.jasperreports.engine的net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer。 JRParagraphContainer在net.sf.jasperreports.engine.base.JRBaseParagraph

感謝您的幫助提意見的

實例。我剛剛去了iReport v4.0.1以匹配我的罐子。現在我可以編輯這些文件。不幸的是,我沒有時間去從頭開始學習所有這些,所以我現在只會對舊版本感到厭煩。

+0

'NullPointerException'表示某些對象引用指向'null',並且代碼試圖調用方法或訪問該對象引用上的字段。確保'(...)'中的所有內容都已初始化,即。不爲空。 – 2013-05-07 17:39:55

+0

這些參數都不爲空,但是一個參數是一個散列表,其中包含null項。它工作,如果我使用.jasper文件檢查,雖然這導致我相信調用代碼工作,但也許我錯了。 – William 2013-05-07 17:46:39

+0

實際問題(從我可以告訴)是,你有一個未設置的格式(在你的jrxml中)和'JRFillTextField.getFormat'返回'null'的文本字段。然後一些內部方法在該格式中調用'Class.isAssignableFrom',它引發'NullPointerException'。 – 2013-05-07 17:49:48

回答

0

庫中的某些功能從4更改爲5,並且需要一些調整才能使報告生效。一個主要的變化是條形碼,iReport如何包含它們以及它們所支持的庫。由於您不熟悉java或JasperReports,我認爲獲得舊版本的iReport是正確的舉措。

將來,要知道可以用jrxml文件打包JAR文件而不是編譯的jasper文件,並讓庫在運行時編譯報告。這使我的維護更少了我找到的噩夢。