我正在使用JSF开发应用程序而我正在使用Glassfish服务器,这个应用程序使用jasperReport生成报告,应用程序工作正常并生成报告(pdf格式),那些报告存储在我的磁盘上,问题出现在我的时候使用
JasperViewer.viewReport(jasperPrint);
向用户显示报告,然后尝试继续使用我的应用程序它不起作用,我应该重新运行该应用程序!
在控制台上,错误是:
Completed shutdown of Log manager service
我的代码:
public void fillReport() throws ParseException, groovyjarjarcommonscli.ParseException {
try {
// - Connexion à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/Mybase", "root", "root");
// - Chargement et compilation du rapport
JasperDesign jasperDesign = JRXmlLoader.load("C:/Documents and Settings/report2.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Map parameterMap = new HashMap();
parameterMap.put("DateFrom", formatingDateTime(date1));
parameterMap.put("DateTo", formatingDateTime(date2));
parameterMap.put("SQL", Createquery());
// // - Execution du rapport
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, connection);
JasperViewer.viewReport(jasperPrint);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:/Documents and Settings/report2.pdf");
} catch (JRException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
connection.close();
}
我该怎么做才能解决这个问题?
Ps:我在stackflow上发现了同样的问题,但没有解决方案(我不想删除JasperViewer.viewReport(jasperPrint),因为我显示报告是微不足道的)
Jasper Report Generates a PDF and then Glassfish crashes/shutsdown
答案 0 :(得分:0)
我不想删除JasperViewer.viewReport(jasperPrint),因为显示报告对我来说是微不足道的
JasperViewer.viewReport()
将在本地显示报告(即在运行Glassfish的计算机上),对远程用户无效。您需要做的是将PDF文件从磁盘发送给用户,以便他们可以下载并打开它。
另请参阅:http://jasperreportjsf.sourceforge.net/web/index.html,了解JasperReports的JSF集成。
答案 1 :(得分:0)
如果该行
JasperViewer.viewReport(jasperPrint);
导致问题,您可以尝试在try-catch-Throwable中包围它:
try {
JasperViewer.viewReport(jasperPrint);
} catch (Throwable t) {
t.printStackTrace();
}
重要的是抓住Throwable,它是Error / Exception层次结构的顶级类,因此它会捕获所有内容。特别是它捕获错误,这是错误的 - 我怀疑你可能会遇到其中一个错误。
但是,如果该方法中的代码调用System.exit()
,则可以使用this nice workaround。