JasperReports

 
 
 
Сообщения:35
Пытаюсь вывести отчёт по моей базе данных на печать, никак не выходит, выдает ошибку:
run:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: net.sf.jasperreports.engine.JasperPrint cannot be cast to net.sf.jasperreports.engine.JasperReport
	at Frames.TariffWindow.jMenuItem1ActionPerformed(TariffWindow.java:411)
	at Frames.TariffWindow.access$800(TariffWindow.java:43)
	at Frames.TariffWindow$8.actionPerformed(TariffWindow.java:275)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
	at java.awt.Component.processMouseEvent(Component.java:6525)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6290)
	at java.awt.Container.processEvent(Container.java:2234)
	at java.awt.Component.dispatchEventImpl(Component.java:4881)
	at java.awt.Container.dispatchEventImpl(Container.java:2292)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
	at java.awt.Container.dispatchEventImpl(Container.java:2278)
	at java.awt.Window.dispatchEventImpl(Window.java:2739)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
	at java.awt.EventQueue.access$400(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:697)
	at java.awt.EventQueue$3.run(EventQueue.java:691)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:719)
	at java.awt.EventQueue$4.run(EventQueue.java:717)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


сам код, который пишу:
 String path = "C:\\My Documents\\Documents\\NetBeansProjects\\Graf3\\src\\reports\\first.jrprint";
        JasperReport jr = null;
        try {
            jr = (JasperReport) JRLoader.loadObjectFromFile("C:\\My Documents\\Documents\\NetBeansProjects\\Graf3\\src\\reports\\first.jrprint");        
            JasperPrint jp = JasperFillManager.fillReport(jr, null, con);
        JasperViewer jv = new JasperViewer(jp);
        jv.setVisible(true);
        jv.setTitle(path);
        con.close();
        } catch (JRException ex) {
            Logger.getLogger(TariffWindow.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(TariffWindow.class.getName()).log(Level.SEVERE, null, ex);
        }


ругается на строчку:
jr = (JasperReport) JRLoader.loadObjectFromFile("C:\\My Documents\\Documents\\NetBeansProjects\\Graf3\\src\\reports\\first.jrprint");  

как я понял, ему не нравится, что явно указывается тип, но если убрать, то компилятор выдает ошибку: "Object cannot be converted to JasperReport"
 
 
Сообщения:334
а что по документации возвращает этот метод loadObjectFromFile ?
 
 
Сообщения:35
keik:
а что по документации возвращает этот метод loadObjectFromFile ?

public static Object loadObjectFromFile(String fileName)
 
 
Сообщения:334
а зачем ты приводишь тогда к JasperReport? вообще судя по ошибке Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: net.sf.jasperreports.engine.JasperPrint cannot be cast to net.sf.jasperreports.engine.JasperReport жвм считает что у тебя там JasperPrint.
 
 
Сообщения:35
keik:
а зачем ты приводишь тогда к JasperReport? вообще судя по ошибке Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: net.sf.jasperreports.engine.JasperPrint cannot be cast to net.sf.jasperreports.engine.JasperReport жвм считает что у тебя там JasperPrint.

когда я убираю приведение, то нетбинс выдает ошибку: "Object cannot be converted to JasperReport"
 
 
Сообщения:334
найди метод который тебе вернет объект JasperReport. например так JasperReport jr = JasperCompileManager.compileReport(reportPath)
 
 
Сообщения:35
keik:
найди метод который тебе вернет объект JasperReport. например так JasperReport jr = JasperCompileManager.compileReport(reportPath)

попробовал использовать JasperCompileManager, вышла ошибка: net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Invalid byte 1 of 1-byte UTF-8 sequence.
 
 
Сообщения:35
изменил тип с JasperReport на JasperPrint:
 String path = "C:\\My Documents\\Documents\\NetBeansProjects\\Graf3\\src\\reports\\tariffReport.jrprint";
        JasperPrint jr = null;
        try {
            jr =  (JasperPrint) JRLoader.loadObjectFromFile("C:\\My Documents\\Documents\\NetBeansProjects\\Graf3\\src\\reports\\first.jrprint");       
            //JasperPrint jp = JasperFillManager.fillReport(jr, null, con);
        JasperViewer jv = new JasperViewer(jr);
        jv.setVisible(true);
        jv.setTitle("Title");
        con.close();
        } catch (JRException ex) {
            Logger.getLogger(TariffWindow.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(TariffWindow.class.getName()).log(Level.SEVERE, null, ex);
        }

но теперь программа зависает минуты на две, но отчет выводит, предварительно выведя ошибку: log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
Изменен:01 апр 2015 12:31
 
 
Сообщения:35
Эту ошибку убрал:
log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
Кому надо, то нужно было создать в папке src проекта файл log4j.properties со следующим содержанием:
# Root logger option
log4j.rootLogger=INFO, stdout
 
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


Но программа по-прежнему подвисает.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет