Kiko, seria interessante você postar o código que chamar o relatório para que possamos dar uma analisada. Porém, eu crio um classe com métodos para chamar meus relatórios.
Assim:
public class Relatorio() throws Exception{
private Connection conexao;
public Relatorio(){
try{
this.conexao = Conexao.getConnection();//Realiza a conexão com o banco
}catch(Exception ex){
throw new Exception("Erro na conexão: "+ex.getMessage());
}
}
public void exibirRelatorio() throws SQLException{
String arquivo = System.getProperty("user.dir") + "/Caminho do arquivo/Nome do arquivo.jasper"; //Colocar o caminho do arquivo e o nome do relatório desejado .jasper
JasperPrint jp = JasperFillManager.fillReport(arquivo, conexao);
JasperViewer.viewReport(jp, false);
if(!conexao.isClosed()){
conexao.close();
}
}//fim do método
}//fim da classe
Após é só instanciar um objeto desta classe e caso seja um botão ou menu, invocar o ActionPerformed e por dentro.
Qualquer coisa posta ai teu código. Valeu!!!