Я считаю, D.Родригес на самом деле дал вам правильное решение, я исследовал аналогичную проблему в течение последних трех дней без везения и, наконец, исправился с предложением Д. Родригеса. Я понимаю, что это сообщение год назад, я публикую это, потому что надеюсь, что кому-то удастся столкнуться с подобным вопросом в будущем.
Моя ситуация: У меня есть JasperReport, который содержит несколько уровней подписок, я хотел бы запустить его в приложении Java, построенном в Netbeans. Первоначально я использовал getResources() для моего основного отчета, когда я его запускаю, он отлично работает в среде IDE, но когда я его создаю и запускаю из jar, он дает «исключение, не найденное в файле», я попробовал альтернативу используя «Inputstream», и использовать подрепорт в качестве входного параметра, он всегда дает «входной поток ошибок загрузки», после дней исследований я был разочарован, и он работал с этим.
так что идея вам необходимо получить основной отчет
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 Sub2 Sub3, Sub4
Так что на моем основном, у меня есть параметры: sub1, sub2, sub3, sub4, установите их все как "Объект" в классе параметров, установите выражение subrepot на " $ P {sub1} ", который будет вызывать subreport« Sub1 »при запуске, а в параметрах subreport добавить $ P {sub2}, $ P {sub3}, $ P {sub3}, потому что вы используете эти параметры в подписях, но на Java-код, вы только можете значения в основном отчете
И так далее так далее для слоев после того, мой код, наконец, в Java является:
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 protected]
Я хотел бы видеть, что я могу сделать!
Вы можете посмотреть [этот пост] (http://stackoverflow.com/a/9786261/876298) –