#java #jasper-reports
Вопрос:
У меня проблема в моей программе, я хочу сгенерировать этот отчет при нажатии кнопки «Загрузка накладной». Я создал отчет с помощью отчета jasper, и он отлично работает в режиме предварительного просмотра, но когда я пытаюсь подключиться к своему java-приложению, при нажатии кнопки ничего не отображается.
это мой код:
btnNewButton_1 = new JButton("Delivery Note Upload");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/storge?autoReconnect=trueamp;useSSL=true","root","");
JasperDesign jdesign = JRXmlLoader.load(null, "C:\Users\MAlasmari\eclipse-workspace\Test\src\MA\Blank_A41.jrxml");
String sqlC= "select *,max(location),max(Date) from itemdelivery";
JRDesignQuery upquery = new JRDesignQuery();
upquery.setText(sqlC);
jdesign.setQuery(upquery);
JasperReport jreport = JasperCompileManager.compileReport(jdesign);
JasperPrint jprint = JasperFillManager.fillReport(jreport, null, conn);
JasperViewer.viewReport(jprint, true);
} catch (JRException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "net.sf.jasperreports.engine.JasperReportsContext.getProperty(String)" because "this.jasperReportsContext" is null
at net.sf.jasperreports.engine.JRPropertiesUtil.getProperty(JRPropertiesUtil.java:150)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createParser(JRXmlDigesterFactory.java:1571)
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createDigester(JRXmlDigesterFactory.java:1549)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:263)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:219)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:194)
at MA.UserM$3.actionPerformed(UserM.java:131)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
Ответ №1:
Вы передали a null
в качестве контекста при загрузке файла «.jrxml». Это привело к NPE в реализации load
метода.
Вам необходимо создать экземпляр контекста отчетов или позвонить DefaultJasperReportsContext.getInstance()
, чтобы создать контекст по умолчанию. Затем передайте это, а не a null
в load
вызове.
Ответ №2:
Я решаю проблему, это было из-за подключения к базе данных в:
JasperPrint jprint = JasperFillManager.fillReport(jreport, null, conn);
в приведенном выше коде соединение неверно
Итак, я создал файл для подключения к Sql и вызвал файл здесь
Вот так.
JasperPrint jprint = JasperFillManager.fillReport(jreport, null, connection);