JavaWebStart应用程序中的JasperReports

JavaWebStart应用程序中的JasperReports,java,jasper-reports,Java,Jasper Reports,我编写了一个简单的应用程序来从服务器上获取订单。我决定能够运行一些报告并在JasperViewer中显示它们,然后从那里决定是否要以其他格式打印或导出/保存。当我在NetBeans中运行该项目时,它工作得很好,但是一旦我编译它并将其发布到我的服务器上,报告就会运行,但我无法在JasperViewer中打开该报告。事实上,查看器根本不会启动 这是我的密码: try { Connection con = DriverManager.getConnection( "jd

我编写了一个简单的应用程序来从服务器上获取订单。我决定能够运行一些报告并在JasperViewer中显示它们,然后从那里决定是否要以其他格式打印或导出/保存。当我在NetBeans中运行该项目时,它工作得很好,但是一旦我编译它并将其发布到我的服务器上,报告就会运行,但我无法在JasperViewer中打开该报告。事实上,查看器根本不会启动

这是我的密码:

try {
    Connection con = DriverManager.getConnection(
            "jdbc:mysql://MYDATABASE",
            "MY_UN",
            "MY_PW");

    java.sql.Statement stmt = con.createStatement();

    ResultSet rs = stmt.executeQuery("SELECT `Product_ID` AS PRODUCT_ID, `Name` AS PRODUCT_DESCRIPTION, `Qty` AS QTY, `Price` AS PRICE_EACH_LINE, `Line_Total` AS LINE_TOTAL_LINE FROM `orderlines`;");

    JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(rs);

    final Map<String, Object> parameter = new HashMap<String, Object>();
    parameter.put("DEALER_NAME", "TY JACOBS");
    parameter.put("DEALER_STREET", "MY_ADDRESS");
    parameter.put("DEALER_CITY_STATE_ZIP", "MY_CITY_STATE_ZIP");
    parameter.put("DEALER_PHONE", "MY_PHONE_NUMBER");

    ClassLoader classloader = getClass().getClassLoader();
    InputStream url = null;
    url = classloader.getResourceAsStream("OK/report3.jrxml");
    JasperReport jasperReport = JasperCompileManager.compileReport(url);

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, resultSetDataSource);

    JasperViewer.viewReport(jasperPrint, false);

} catch (SQLException|JRException ex) {
    Logger.getLogger(DbReportDSFill.class.getName()).log(Level.SEVERE, null, ex);
}
试试看{
Connection con=DriverManager.getConnection(
“jdbc:mysql://MYDATABASE",
“我的联合国”,
“我的”;
java.sql.Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“选择`Product_ID`作为Product_ID,`Name`作为Product_DESCRIPTION,`Qty`作为Qty,`Price`作为Price_每条线,`LINE_Total`作为orderlines`中的LINE_Total_线”);
JResultSetDataSource resultSetDataSource=新的JResultSetDataSource(rs);
最终映射参数=new HashMap();
参数put(“经销商名称”、“TY JACOBS”);
参数put(“经销商街”、“我的地址”);
参数put(“经销商城市州”、“我的城市州”);
参数.put(“经销商电话”、“我的电话号码”);
ClassLoader ClassLoader=getClass().getClassLoader();
InputStream url=null;
url=classloader.getResourceAsStream(“OK/report3.jrxml”);
JasperReport-JasperReport=JasperCompileManager.compileReport(url);
JasperPrint JasperPrint=JasperFillManager.fillReport(jasperReport,参数,结果数据源);
JasperViewer.viewReport(jasperPrint,false);
}catch(SQLException | jrex异常){
Logger.getLogger(DbReportDSFill.class.getName()).log(Level.SEVERE,null,ex);
}

还有一件事,我可以在本地运行它,没有问题。似乎一旦我将它发布到服务器上,我就无法在JasperViewer中获取报告

我想,我们也有类似的情况。使用
JasperViewer.viewReport(jasperPrint,false)它显示在部署它的同一服务器上。因此,当您在本地执行时,它可以正常工作,因为它是在本地部署的。您可以验证尝试从其他系统点击您的本地url时,您将看到jasperviewer将在您的系统中打开,而不是从调用它的位置打开

以下是我们所做的:
转换为字节数组并将其传递到前端进行显示

byte[] byteArray = JasperExportManager.exportReportToPdf(jasperPrint);
然后
httpServletResponse.getOutputStream().write(byteArray)

希望这有帮助