Olá Antonio;
Caso não tenha resolvido ainda, segue abaixo:
Vou descrever abaixo minhas classe para impressão do relatório, ok? Talvez seja útil para você.
O método abaixo, como pode perceber, recebe o nome do relatório e os parametros (utilizei ArrayList, mas o correto é adaptar para hasmap como vc vinha fazendo). É este método que chama o preview do relatorio.
public void startRel(String relatorio, ArrayList al){
JasperPrint relat=null;
PrintRel print=new PrintRel();
try {
relat = print.gerar(relatorio,al);
JasperViewer.viewReport(relat, false);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,"Houve um erro ao imprimir o relatório, contacte o administrador: "+ex);
}
}
Observe que chamo um outro método, o PrintRel.gerar, um métdo que irá verificar a conexão com o banco e me retornar um objeto JasperPrint.:
package util;
import bean.Parametro;
import dao.DAO;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
public class PrintRel{
public PrintRel() {
}
public JasperPrint gerar(String nomeRelatorio, ArrayList al) throws SQLException {
JasperPrint rel = null;
try {
DAO dao = new DAO();
Connection conn = DAO.getConexao();
HashMap map = new HashMap();
Parametro par = new Parametro();
for(int i=0; i<al.size();i++){
par = (Parametro) al.get(i);
map.put(par.getNome(), par.getConteudo());
}
rel = JasperFillManager.fillReport(nomeRelatorio, map, conn);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,ex);
}
return rel;
}
}
Abaixo segue o método getConexao:
public static Connection getConexao() throws SQLException {
Connection conn=null;
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return conn;
}
É um codigo antigo, sei que há melhorias (principalmente onde estou usando o AL) mas pode te dar uma ajuda pois está funcionando há um bom tempo.
Abraço!
Marco A.>