Boa Noite, dei uma lida nesse tutorial
http://davidbuzatto.com.br/2010/10/10/jasperreports-trabalhando-com-relatorios-em-java-parte-2-primeiros-relatorios/
fiz as classes como esta no tutorial segue o codigo
Classe Relatorio de cliente que seria o (MAIN do tutorial)
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import javax.swing.JOptionPane;
import com.lowagie.text.pdf.codec.Base64.InputStream;
import com.mysql.jdbc.Statement;
import java.sql.*;
import java.util.*;
public class RelatorioDeClientes {
public static void main(String[] args) {
new RelatorioDeClientes().abrirRelatorioClientes();
}
public void abrirRelatorioClientes() {
InputStream inputStream = (InputStream) getClass().getResourceAsStream("C:/Java/javaWorkspace2/Clientes/report1.jasper");
// mapa de parâmetros do relatório (ainda vamos aprender a usar)
Map parametros = new HashMap();
try {
// abre o relatório
ReportUtils.openReport( "Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection() );
} catch ( SQLException exc ) {
exc.printStackTrace();
} catch ( JRException exc ) {
exc.printStackTrace();
}
}
}
Classe ConnectionFactory
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
/*
* Este bloco estático será executado assim que esta classe for carregada,
* sendo assim, será executado apenas uma vez.
*/
static {
try {
/*
* Carrega a classe com.mysql.jdbc.Driver, que é a implementação
* do driver JDBC para o MySQL.
*/
Class.forName( "com.mysql.jdbc.Driver" );
// caso a classe não seja encontrada
} catch ( ClassNotFoundException exc ) {
/*
* Como log usaremos o stacktrace das excessões, mas recomendo
* que para um projeto real você utilize algum mecanismo de log
* melhor, como o Log4J por exemplo.
*/
exc.printStackTrace();
}
}
/**
* O método getConnection retorna uma conexão com o banco de dados baseado
* nos parâmetros fornecidos.
* @param url O endereço da base de dados.
* @param usuario O usuário que tem permissão na base de dados especificada.
* @param senha A senha do usuário especificado
* @return Uma conexão com o banco de dados especificado na url.
* @throws SQLException Caso ocorra algum problema durante a conexão.
*/
public static Connection getConnection(
String url,
String usuario,
String senha ) throws SQLException {
// retorna a conexão a partir do método getConnection de DriverManager
return DriverManager.getConnection( url, usuario, senha );
}
/**
* Obtém uma conexão para a base de dados sakila.
*
* @return Uma conexão para a base de dados sakila.
* @throws SQLException Caso ocorra algum problema durante a conexão.
*/
public static Connection getSakilaConnection() throws SQLException {
return getConnection(
"jdbc:mysql://localhost/dblanhouse",
"root",
"root" );
}
}
Classe ReportUtils
import java.awt.BorderLayout;
import java.sql.Connection;
import java.util.Map;
import com.lowagie.text.pdf.codec.Base64.InputStream;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.swing.JRViewer;
import javax.swing.JFrame;
public class ReportUtils {
/**
* Abre um relatório usando uma conexão como datasource.
*
* @param titulo Título usado na janela do relatório.
* @param inputStream InputStream que contém o relatório.
* @param parametros Parâmetros utilizados pelo relatório.
* @param conexao Conexão utilizada para a execução da query.
* @throws JRException Caso ocorra algum problema na execução do relatório
*/
public static void openReport(
String titulo,
InputStream inputStream,
Map parametros,
Connection conexao ) throws JRException {
/*
* Cria um JasperPrint, que é a versão preenchida do relatório,
* usando uma conexão.
*/
JasperPrint print = JasperFillManager.fillReport(
inputStream, parametros, conexao );
// abre o JasperPrint em um JFrame
viewReportFrame( titulo, print );
}
/**
* Abre um relatório usando um datasource genérico.
*
* @param titulo Título usado na janela do relatório.
* @param inputStream InputStream que contém o relatório.
* @param parametros Parâmetros utilizados pelo relatório.
* @param dataSource Datasource a ser utilizado pelo relatório.
* @throws JRException Caso ocorra algum problema na execução do relatório
*/
public static void openReport(
String titulo,
InputStream inputStream,
Map parametros,
JRDataSource dataSource ) throws JRException {
/*
* Cria um JasperPrint, que é a versão preenchida do relatório,
* usando um datasource genérico.
*/
JasperPrint print = JasperFillManager.fillReport(
inputStream, parametros, dataSource );
// abre o JasperPrint em um JFrame
viewReportFrame( titulo, print );
}
/**
* Cria um JFrame para exibir o relatório representado pelo JasperPrint.
*
* @param titulo Título do JFrame.
* @param print JasperPrint do relatório.
*/
private static void viewReportFrame( String titulo, JasperPrint print ) {
/*
* Cria um JRViewer para exibir o relatório.
* Um JRViewer é uma JPanel.
*/
JRViewer viewer = new JRViewer( print );
// cria o JFrame
JFrame frameRelatorio = new JFrame( titulo );
// adiciona o JRViewer no JFrame
frameRelatorio.add( viewer, BorderLayout.CENTER );
// configura o tamanho padrão do JFrame
frameRelatorio.setSize( 500, 500 );
// maximiza o JFrame para ocupar a tela toda.
frameRelatorio.setExtendedState( JFrame.MAXIMIZED_BOTH );
// configura a operação padrão quando o JFrame for fechado.
frameRelatorio.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
// exibe o JFrame
frameRelatorio.setVisible( true );
}
}
Quando executo ele ja o seguinte erro
Exception in thread "main" java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.(Unknown Source)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:53)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:210)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:376)
at ReportUtils.openReport(ReportUtils.java:36)
at RelatorioDeClientes.abrirRelatorioClientes(RelatorioDeClientes.java:46)
at RelatorioDeClientes.main(RelatorioDeClientes.java:32)
OBS: os Jars do ireports já dei o add jars external.
Agradeço que me ajudar, estou desesperado para conseguir fazer.
Obrigado