Hi,
ich hab mir vor einiger Zeit vorgenommen, meine Applikation mit einer Reporting-Funktion auszustatten.
Ich benutze iReports 3.7.5 um meine Reports zu designen. Diese funktionieren in diesem Tool auch, d.h. ich bekomme ein paar Seiten mit Daten aus einer MySQL Datenbank angezeigt. Ich musste auch die Software JasperReports 3.7.5 installieren, welche die Grundlage für iReport ist.
Ich hab mir nun in eine Klasse entwickelt, in der die gesamte Funktionalität zum Aufruf eines solchen Reports zur Verfügung stellt. Sie sieht folgendermaßen aus:
Ich bekomme an der Stelle, an der ich ein JasperFillManager.fillReport(...) (im Code gekennzeichnet)
aufrufe, folgende Exception:
Have no FileObject for C:\Programme\Java\jdk1.6.0\jre\classes
02.12.2010 08:34:00 praktikumprogrammieren.Reporting.JasperReports generateReport
SCHWERWIEGEND: null
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:205)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:376)
at praktikumprogrammieren.Reporting.JasperReports.generateReport(JasperReports.java:117)
at praktikumprogrammieren.Frames.IFrames.IframeArticles.test(IframeArticles.java:423)
at praktikumprogrammieren.Frames.IFrames.IframeArticles.access$200(IframeArticles.java:30)
at praktikumprogrammieren.Frames.IFrames.IframeArticles$MyButtonListener.actionPerformed(IframeArticles.java:519)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
at java.ibjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.ibjectInputStream.<init>(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:53)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:200)
... 30 more
Die Fehlermeldung sagt mir, dass die Methode loadObject anscheinend nicht auf meinen InputStream zugreifen kann. Ich hab dann überprüft, ob die Berichtsdatei irgendwie schreibgeschützt ist. Leider nicht der Fall.
Ich bin mit meinem Latein nun am Ende...
Kann mir jemand helfen oder einen Tipp geben????
MfG Tobi
ich hab mir vor einiger Zeit vorgenommen, meine Applikation mit einer Reporting-Funktion auszustatten.
Ich benutze iReports 3.7.5 um meine Reports zu designen. Diese funktionieren in diesem Tool auch, d.h. ich bekomme ein paar Seiten mit Daten aus einer MySQL Datenbank angezeigt. Ich musste auch die Software JasperReports 3.7.5 installieren, welche die Grundlage für iReport ist.
Ich hab mir nun in eine Klasse entwickelt, in der die gesamte Funktionalität zum Aufruf eines solchen Reports zur Verfügung stellt. Sie sieht folgendermaßen aus:
Java:
//JasperReports.java
package praktikumprogrammieren.Reporting;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.attribute.standard.MediaSize.Engineering;
import net.sf.jasperreports.engine.*;
/**
*
* @author Tobi
* @date 22.10.2010
*/
public class JasperReports {
//***
//Variables
private HashMap<String, Integer> parameter;
private String strPath;
private String strFile;
private Connection conn;
private JasperReport jasperReport;
private JasperPrint jasperPrint;
//***
//Constructor
/**
*
* @param Path
* @param File
*/
public JasperReports(final String Path, final String File) {
this.strPath = Path;
this.strFile = File;
if (!this.strPath.endsWith("\\")) {
this.strPath += "\\";
}
parameter = new HashMap<String, Integer>();
}
/**
*
* @param Path
* @param File
* @param conn
*/
public JasperReports(final String Path, final String File, Connection conn) {
this(Path, File);
this.conn = conn;
}
//***
//Functionality
/**
* Adds a string key-pair to the parameter set
* @param Key
* @param Value
*/
public void addParameter(final String strParametername, final int intValue) {
parameter.put(strParametername, intValue);
}
/**
*
*/
public void clearParameters() {
parameter.clear();
}
/**
* Generates a report in odf format
*/
public void generateReport() {
String strOutputFilename = this.strPath +
this.strFile.subSequence(0, this.strFile.length() - 6) + ".pdf";
String strReportFile = this.strPath + this.strFile;
//before generating an pdf file, checking whether such a file exists
//if true -> delete it
try {
jasperReport = JasperCompileManager.compileReport(strReportFile);
InputStream is = null;
try {
is = new FileInputStream(strReportFile);
} catch (FileNotFoundException ex) {
Logger.getLogger(JasperReports.class.getName()).log(Level.SEVERE, null, ex);
}
if (this.conn == null)
jasperPrint = JasperFillManager.fillReport(strReportFile, parameter, new JREmptyDataSource());
else {
jasperPrint = JasperFillManager.fillReport(is, parameter, conn); //hier wird die Exception geworfen
}
JasperExportManager.exportReportToPdfFile(jasperPrint, strOutputFilename);
} catch (JRException ex) {
Logger.getLogger(JasperReports.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Ich bekomme an der Stelle, an der ich ein JasperFillManager.fillReport(...) (im Code gekennzeichnet)
aufrufe, folgende Exception:
Have no FileObject for C:\Programme\Java\jdk1.6.0\jre\classes
02.12.2010 08:34:00 praktikumprogrammieren.Reporting.JasperReports generateReport
SCHWERWIEGEND: null
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:205)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:376)
at praktikumprogrammieren.Reporting.JasperReports.generateReport(JasperReports.java:117)
at praktikumprogrammieren.Frames.IFrames.IframeArticles.test(IframeArticles.java:423)
at praktikumprogrammieren.Frames.IFrames.IframeArticles.access$200(IframeArticles.java:30)
at praktikumprogrammieren.Frames.IFrames.IframeArticles$MyButtonListener.actionPerformed(IframeArticles.java:519)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
at java.ibjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.ibjectInputStream.<init>(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:53)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:200)
... 30 more
Die Fehlermeldung sagt mir, dass die Methode loadObject anscheinend nicht auf meinen InputStream zugreifen kann. Ich hab dann überprüft, ob die Berichtsdatei irgendwie schreibgeschützt ist. Leider nicht der Fall.
Ich bin mit meinem Latein nun am Ende...
Kann mir jemand helfen oder einen Tipp geben????
MfG Tobi