2015-06-20 66 views
0

我遇到問題,我使用iReport爲我的庫存系統製作報告。一切似乎工作正常,直到我建立一個可執行文件後測試它。當我按下按鈕什麼都沒有發生。如何在java中加載可執行文件中的Jasper Report?

這裏是我的按鈕的代碼。

當我在NetBeans上運行文件但不在可執行文件中時,報告顯示出來。什麼可能導致這個問題。

try { 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + Connect.URL(); 
    conn = DriverManager.getConnection(url); 
    Statement stmt = conn.createStatement(); 
    JasperDesign jasperDesign = JRXmlLoader.load("report1.jrxml"); 
    String sql = "select * from Incoming"; 
    JRDesignQuery newQuery = new JRDesignQuery(); 
    newQuery.setText(sql); 
    jasperDesign.setQuery(newQuery); 
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn); 
    JasperViewer.viewReport(jasperPrint); 

} catch (SQLException | JRException ex) { 
    Logger.getLogger(Inventory_ReportFrm.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

的可執行的JAR文件指向正確的主要方法?當運行它時,還要檢查jasper和驅動程序庫是否在類路徑中 – Guillermo

+0

是的,jasper和其他庫位於lib文件夾中,因爲我在項目屬性中檢查了「依賴於副本的庫」。在Netbeans IDE上運行它時它工作正常 –

回答

0

將您的jrxml文件加載到您的班級路徑中。使用編譯管理器編譯報告並保存到絕對位置。更好地使用C文件作爲絕對位置。

String documents=newJFileChooser().getFileSystemView().getDefaultDirectory().toString(); 

JasperCompileManager.compileReportToFile(jasperDesign,documents+"\\report1.jasper"); 

JasperPrint jasperPrint = JasperFillManager.fillReport(documents+"\\report1.jasper, null, conn); 

JasperViewer.viewReport(jasperPrint,false); 
0

我已經解決了關於iReport/jasper報告在打開/運行時沒有執行可執行文件的問題。

似乎程序(可執行文件)找不到.jrxml/.jasper文件的默認位置(通常使用生成和清單文件在項目文件夾中),因此替代方法是將報告文件保存在硬盤。恩。 「D:/ Files and Documents/Documents/report1.jrxml」

這有效,但不知何故不是正確的方法。大多數程序員都想使用相對路徑來做到這一點。如果您要鏈接的文件位於同一個目錄中。但我不知道爲什麼它不能在可執行文件上工作。所以我決定使用一個絕對路徑,如果我決定在另一臺計算機上使用它,這將是一個問題。

無論如何,它的工作原理。 :)

0

只要複製你的.jrxml文件到文件夾DIST它會正常工作

相關問題