Exibindo relatório Jasper em Java [RESOLVIDO]

Boa noite galera,

Estou desesperado fazendo um projeto de Java para a facul, fiquei com a parte de relatórios.

Criei certinho meus arquivos Jasper, no iReport.

Criei a janela, mas quando clico no botão para gerar o relatório, abre um JOptionPane sem nenhuma informação de erro nada.

Classe que está gerando corretamente o Relatório

package Relatorio;

import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.sql.ResultSet;

import java.util.HashMap;

import javax.swing.*;

import net.miginfocom.swing.MigLayout;

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class Clientes extends JFrame implements ActionListener{

	private static final long serialVersionUID = 1L;
	private JLabel lbClientes, lbSem, lbData, lbAte;
	private JTextField tfData1, tfData2;
	private JButton btGerar;
	private JPanel jPanel1, jPanel2, jPanel3;
	
	public Clientes (){
		
		super ("Clientes");
		setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
		lbClientes = new JLabel(" RELATÓRIO DE CLIENTES ");
		lbSem = new JLabel(" Semanal/Mensal ");
		tfData1 = new JTextField(10);
		lbAte = new JLabel("Até");
		tfData2 = new JTextField(10);
		lbData = new JLabel(" (Informe o período) ");
		btGerar = new JButton ("Gerar Relatório");
		jPanel1 = new JPanel();
		jPanel2 = new JPanel();
		jPanel3 = new JPanel();
		
		lbClientes.setFont(new Font( "Tahoma", Font.ITALIC, 30 ));
		lbSem.setFont(new Font( "Tahoma", Font.BOLD, 18));
		lbAte.setFont(new Font( "Tahoma", Font.BOLD, 18));
		lbData.setFont(new Font( "Tahoma", Font.BOLD, 18));
		
		Container janela;
		janela = getContentPane();
		janela.setLayout(new BorderLayout());

		btGerar.addActionListener(this);
		
		jPanel1.setLayout(new FlowLayout());
		jPanel2.setLayout(new MigLayout());
		jPanel3.setLayout(new FlowLayout());
		
		jPanel1.add(lbClientes);
		
				
		jPanel2.add(lbSem,"wrap");
		jPanel2.add(tfData1);
		jPanel2.add(lbAte);
		jPanel2.add(tfData2);
		jPanel2.add(lbData);
		
		jPanel3.add(btGerar);
		
		janela.add(jPanel1, BorderLayout.NORTH); 
		janela.add(jPanel2, BorderLayout.WEST);
		janela.add(jPanel3, BorderLayout.SOUTH);

        pack();
        		
	}
	
    public void actionPerformed(ActionEvent e) { 
		
		if (e.getSource() == btGerar)
			try {
				DataBaseUtils db = new DataBaseUtils();
				String query = "select distinct c.\"NOME\", c.\"ID\", p.\"DATA\", p.\"VALOR\" " +
				               "from \"CLIENTE\" c, \"PEDIDO\" p " +
				               "where c.\"ID\" = p.\"CLIENTE_ID\" and p.\"DATA\" between '" + tfData1.getText() + "' and '"+ tfData2.getText() +"' " +
				               "order by p.\"DATA\" ";
				ResultSet rs = db.Pesquisar(query);
				JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
				JasperPrint impressao = JasperFillManager.fillReport("Rel_Clientes.jasper", new HashMap(), jrRS);
				JasperViewer.viewReport(impressao,false);

			} catch (Exception Erro) {
				JOptionPane.showMessageDialog(null, Erro.getLocalizedMessage());
			}
	}
	
	public static void main(String[] args) {
		Clientes ex = new Clientes();
		ex.setVisible(true);
		}

}

Classe com o erro
package Relatorio;

import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;

import javax.swing.*;

import net.miginfocom.swing.MigLayout;

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class Despesas extends JFrame implements ActionListener{

	private static final long serialVersionUID = 1L;
	private JLabel lbDespesas, lbSem, lbData, lbAte;
	private JTextField tfData1, tfData2;
	private JButton btGerar;
	private JPanel jPanel1, jPanel2, jPanel3;
		
	public Despesas (){
		
		super ("Despesas");
		setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
		lbDespesas = new JLabel(" RELATÓRIO DE DESPESAS ");
		lbSem = new JLabel(" Semanal/Mensal ");
		tfData1 = new JTextField(10);
		lbAte = new JLabel("Até");
		tfData2 = new JTextField(10);
		lbData = new JLabel(" (Informe o período) ");
		btGerar = new JButton ("Gerar Relatório");
		jPanel1 = new JPanel();
		jPanel2 = new JPanel();
		jPanel3 = new JPanel();
		
		lbDespesas.setFont(new Font( "Tahoma", Font.ITALIC, 30 ));
		lbSem.setFont(new Font( "Tahoma", Font.BOLD, 18));
		
		Container janela;
		janela = getContentPane();
		janela.setLayout(new BorderLayout());
		
		jPanel1.setLayout(new FlowLayout());
		jPanel2.setLayout(new MigLayout());
		jPanel3.setLayout(new FlowLayout());
		
		jPanel1.add(lbDespesas);
		
				
		jPanel2.add(lbSem,"wrap");
		jPanel2.add(tfData1);
		jPanel2.add(lbAte);
		jPanel2.add(tfData2);
		jPanel2.add(lbData);
		
		jPanel3.add(btGerar);
		
		btGerar.addActionListener(this);
		
		janela.add(jPanel1, BorderLayout.NORTH); 
		janela.add(jPanel2, BorderLayout.WEST);
		janela.add(jPanel3, BorderLayout.SOUTH);

        pack();
		        
	}
	
	public void actionPerformed(ActionEvent e) { 

		if (e.getSource() == btGerar)
			try {
				DataBaseUtils db = new DataBaseUtils();
				String query = "select distinct d.\"ID\", t.\"DESCRICAO\", d.\"VALOR\" " +
				               " from \"DESPESA\" d, \"TIPO_DESPESA\" t " +
				               " where d.\"TIPO_DESPESA_ID\" = t.\"ID\" and d.\"DATA\" between '" + tfData1.getText() + "' and '"+ tfData2.getText() +"' " +
				               " order by d.\"ID\" ";
				ResultSet rs = db.Pesquisar(query);
				JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
				JasperPrint impressao = JasperFillManager.fillReport("Rel_Despesas.jasper", new HashMap(), jrRS);
				JasperViewer.viewReport(impressao,false);

			} catch (Exception Erro) {
				JOptionPane.showMessageDialog(null, Erro.getLocalizedMessage());
			}
			
	}

	public static void main(String[] args) {
		Despesas ex = new Despesas();
		ex.setVisible(true);
		}

}

Classe de Conexão com o Banco de Dados

package Relatorio;

import java.sql.*;

import javax.swing.JOptionPane;

public class DataBaseUtils {
private Connection con;
private Statement st;

private void ConectaBanco() {
	String url = "jdbc:postgresql://localhost:5432/Projeto";
	String nome = "postgres";
	String psw = "root";

	try {
		// Registrando o driver
		Class.forName("org.postgresql.Driver");
		// Fazendo uma conexão teste
		con = DriverManager.getConnection(url, nome, psw);

	} catch (Exception ex) {
		JOptionPane.showMessageDialog(null,
				"Erro ao conectar no Banco de Dados: " + ex.getMessage());
	}
}

public ResultSet Pesquisar(String query) {
	try {
		ConectaBanco();
		st = con.createStatement();

		return st.executeQuery(query);

	} catch (Exception ex) {
		JOptionPane.showMessageDialog(null, "Erro ao executar pesquisa: "
				+ ex.getMessage());

		return null;
	}
}

public void Inserir(String query) {
	try {
		ConectaBanco();
		st = con.createStatement();

		st.executeUpdate(query);

	} catch (Exception ex) {
		JOptionPane.showMessageDialog(null, "Erro ao executar pesquisa: "
				+ ex.getMessage());
	}
}

public void Alterar(String query) {
	try {
		ConectaBanco();
		st = con.createStatement();

		st.executeUpdate(query);

	} catch (Exception ex) {
		JOptionPane.showMessageDialog(null, "Erro ao executar pesquisa: "
				+ ex.getMessage());
	}
}

public void Excluir(String query) {
	try {
		ConectaBanco();
		st = con.createStatement();

		st.executeUpdate(query);

	} catch (Exception ex) {
		JOptionPane.showMessageDialog(null, "Erro ao executar pesquisa: "
				+ ex.getMessage());
	}
}

}

Consegui imprimir o erro…Alguem pode me ajudar???

java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517)
at Relatorio.Despesas.actionPerformed(Despesas.java:90)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Cara ta meio dificil de ler todo o seu código, mas como esta dando nullPointerException provavelmente você esta tentando usar algum método de um objeto que não foi instanciado e, por isso, esta nulo.

Cola o erro completo.

benignoms

Este é o erro completo que obtive atraves do printStackTrace().

É estranho que em uma classe (Classes acima descritas) com a mesma estrutura, funciona corretamente e na outra ocorre o erro.

Estive pesquisando e vi alguns erros parecidos com o que estou com problemas, todos estavam com erros nas linhas do FillManager.

Map parameters = new HashMap();
JasperPrint impressao = JasperFillManager.fillReport(“Rel_Despesas.jasper”, parameters, jrRS);

Esta estrutura está errada?

Resolvi…

Após muitas pesquisas por tópicos e sites, achei a solução!!!

Apenas uma atualização dos arquivos Jar, utilizados no iReport (a última versão que baixei recentemente), resolveu os problemas.

Obrigado…