我相信D.羅德里格斯實際上給了你正確的解決方案,過去三天我一直在研究一個類似的問題,但沒有運氣,最後讓它與D.羅德里格斯的建議一致。我意識到這是一年前的一篇文章,因爲我希望對將來遇到類似問題的人有所幫助,所以我發佈了這篇文章。
我的情況是:我有一個包含多層子報表的JasperReport,我想在建立在Netbeans中的Java應用程序中運行它。最初,我使用getResources()作爲我的主要報告,當我運行它時,它在IDE中正常工作,但是當我構建它並從jar中運行時,它會給出「文件未找到異常」,我嘗試了替代方法使用「輸入流」,並使用子報表作爲輸入組,它總是會給出「錯誤加載輸入流」,經過幾天的研究後,我感到沮喪,並且與此一起工作。
這樣的想法是,你需要讓主報告
JasperReport main = (JasperReport)JRLoader.loadObject(this.getClass().getResource("main.jasper"));
和所有子報表中的資源
JasperReport sub1 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub1.jasper"));
JasperReport sub2 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub2.jasper"));
JasperReport sub3 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub3.jasper"));
JasperReport sub4 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub4.jasper"));
(也有在上面的例子4子報告)
既然你正在將子報告作爲「參數」傳遞,因此您需要在報告中包含這些參數,並且您需要確保這些參數到達使用它們的圖層, Ë層 主要 Sub1的 分公司2 Sub3中,Sub4中
所以在我的主,我有參數:SUB1,SUB2,SUB3,SUB4,將它們都作爲參數類 「對象」,設置subrepot表達「 $ P {sub1}「,它會在運行時調用子報表」Sub1「,並在子報表參數中添加$ P {sub2},$ P {sub3},$ P {sub3},因爲您在子報表中使用此參數, Java代碼,你只可能值主報告
等等等等的後層,我用Java代碼finaly是:
JasperReport jr = (JasperReport)JRLoader.loadObject(this.getClass().getResource("main.jasper"));
JasperReport sub1 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub1.jasper"));
JasperReport sub2 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub2.jasper"));
JasperReport sub3 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub3.jasper"));
JasperReport sub4 = (JasperReport)JRLoader.loadObject(this.getClass().getResource("sub4.jasper"));
Map para = new HashMap();
para.put("Sub1", sub1);
para.put("Sub2", sub2);
para.put("Sub3", sub3);
para.put("Sub4", sub4);
JasperPrint jp = JasperFillManager.fillReport(jr, para, conn);
JasperViewer.viewReport(jp, false);
它的作品很神奇!
如果仍然沒有工作,請發表評論或給我發email在:[email protected]
我很想看看我能做些什麼!
你可以看看[這篇文章](http://stackoverflow.com/a/9786261/876298) – 2012-07-12 12:54:30