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());
}
}
}