2013-05-07 2 views
2

나는 회사를 떠난 개발자로부터 프로젝트를 상속 받았다. 이 프로젝트는 자바 (Java)에 있으며, 나에게 새로운 재스퍼 보고서를 사용하여 PDF를 생성합니다. 일부 텍스트를 삭제하려면 보고서 중 하나를 업데이트해야합니다. 소스 제어에서 코드를 꺼내 실행하면 정상적으로 작동합니다. 그러나 jrxml 파일 중 하나를 열어 변경하지 않고 빌드 한 다음 보고서를 다시 실행 해보십시오. 내가 갖는 오류 :Jasper가 빌드 중단 (변경 사항 없음)

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 (JRFillElementContainer.java : 256) d (JRVerticalFiller.java:2036) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail (JRVerticalFiller.java:760) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart (JRVerticalFiller.java:270) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport (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.run) .java : 59) net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run (JRThreadSubreportRunner.java:205) java.lang.Thread.run (알 수없는 출처)

오류의 의미와 디버깅 방법을 이해할 수 없습니다. 위에서 말했듯이 나는 실제 보고서를 변경하지 않았습니다. 이번에는 iReport에서 jrxml 파일을 열고 빌드했습니다. 재스퍼 파일을 체크인 된 버전으로 되 돌리면 보고서가 다시 시작됩니다. 이 보고서에는 몇 가지 하위 보고서가 있으며 어떤 파일을 작성하면 전체 보고서가 손상 될지는 중요하지 않습니다.

이 도움이하지만 난 코드를 디버깅과가 죽어 가고 라인이 읽는 경우 나도 몰라 :

bytes = JasperRunManager.runReportToPdf(...) 

편집 : 내 재스퍼 보고서 JAR 내 iReport로 버전은 다른 버전이었다. 내가 사용하고있는 iRpeort 버전의 JAR 파일을 추가했는데 (5.1.0) 이제 새로운 오류가 발생합니다. 진행! 오류 :

유형의 net.sf.jasperreports.engine의 net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer를 필드에 net.sf.jasperreports.engine.base.JRBaseTextField의 인스턴스를 할당 할 수 없습니다. JRParagraphContainer 도움말 덧글에 감사드립니다


net.sf.jasperreports.engine.base.JRBaseParagraph

의 예이다. 방금 가져온 항아리와 iReport v4.0.1이 일치했습니다. 이제 파일을 편집 할 수 있습니다. 불행히도 나는 처음부터이 모든 것을 배우고 시간을 가질 필요가 없기 때문에 지금은 오래된 버전으로 아플 것이다.

+0

'NullPointerException'은 어떤 객체 참조가'null'을 가리키고 있으며, 그 코드가 메소드를 호출하거나 객체 참조의 필드에 접근하려한다는 것을 의미합니다. '(...)'의 모든 것이 초기화되었는지 확인하십시오. null이 아닙니다. –

+0

매개 변수 중 하나가 null이지만 하나의 매개 변수가 null 항목이 포함 된 해시 맵입니다. 체크 인 된 .jasper 파일을 사용하면 작동하지만 호출 코드가 작동하지만 어쩌면 내가 틀렸다는 것을 알게됩니다. – William

+0

실제 문제는 (내가 말할 수있는 것부터) 당신의 포맷이 jrxml 인 텍스트 필드가 있고'JRFillTextField.getFormat'이'null'을 반환한다는 것입니다. 그런 다음 어떤 내부 메서드는 해당 형식에서'Class.isAssignableFrom'을 호출하여 'NullPointerException'을 throw합니다. –

답변

0

라이브러리의 일부 기능이 4에서 5로 변경되었으며 보고서가 작동하려면 몇 가지 조정이 필요합니다.한 가지 주요 변경 사항은 바코드, iReport에 포함 된 내용 및 지원되는 라이브러리입니다. 당신이 자바 또는 JasperReports에 익숙하지 않기 때문에, 나는 이전 버전의 iReport를 얻는 것이 올바른 방법이라고 생각한다.

미래에 JAR 파일을 컴파일 된 jasper 파일 대신 jrxml 파일로 압축 할 수 있고 라이브러리가 즉시 보고서를 컴파일하도록 할 수 있습니다. 이것은 내가 발견 한 악몽의 유지 보수를 훨씬 덜합니다.

관련 문제