Aplicação Java fecha antes de abrir relatórios do iReport

Bom dia à todos.

Estou tendo alguns problemas com relatórios do iReport no Java, acontece apenas algumas vezes, mas não é sempre.

Quando o usuário abre um determinado relatório, a aplicação simplesmente fecha sem disparar qualquer erro, mas ao tentar abrir o mesmo relatório novamente, ele abre normalmente (às vezes são necessárias diversas tentativas até conseguir abrir). Ou acontece o contrário, o relatório abre normalmente, e ao tentar abrir o mesmo relatório depois, a aplicação fecha (às vezes são necessárias diversas tentativas até que a aplicação feche). Isso não acontece com um relatório específico, esse problema é aleatório.

Notei que isso está acontecendo apenas com usuários que utilizam o Windows 10, pelo menos ainda não apareceu nenhum caso com usuários de outras versões do Windows.

Segue um exemplo de código de como gero meus relatórios:

Conexao conexao = new Conexao();

try {

    conexao.conectar();

    Map parametros = new HashMap();

    parametros.put("titulo", "Relatório de Exemplo"); 

    JasperReport report = (JasperReport) JRLoader.loadObject(new File(REPORT_DIR+"RelatorioExemplo.jasper"));

    JasperPrint jasperPrint = JasperFillManager.fillReport(report, parametros, conexao.conn);

    JRViewer view = new JRViewer(jasperPrint);

    jPanel1.add(view);

    view.setVisible(true);

} catch (Exception e) {
    System.out.println("Não foi possível gerar o relatório: "+e.getMessage()+"\n"+e.getLocalizedMessage());
    Logger.getLogger(Relatorios.class.getName()).log(Level.SEVERE, null, e);
} finally {
    conexao.fechar();
}

A versão do plugin do iReport que uso é a 5.5.0.

Espero que alguém possa me ajudar.

Obrigado.

Você precisa verificar o consumo de memória. Provavelmente este seja o problema.

Obrigado pela sugestão, Darlan.

Sim, pelo que verifiquei, isso acontece mesmo com o consumo de memória baixo.

Na minha aplicação tenho uma classe que mede o consumo da memória alocada através da classe Runtime, onde os valores são exibidos em um JProgressBar. Pelo que pude acompanhar o uso de memória nunca excedeu quando ocorreu esse problema, nem mesmo disparou o erro de OutOfMemoryError.

Mas mesmo que houvesse um consumo maior, quando a aplicação fecha e é reaberta, ao tentar abrir algum relatório ainda com o consumo baixo, a aplicação fecha.

Mas você está monitorando a memória total, a memória heap ou a stack?
É uma aplicação desktop?

Estou monitorando a memória usada dentro do que é alocada pela JVM.

Segue o código que é executado dentro de uma classe TimerTask:

Runtime rt = Runtime.getRuntime();

int mb = 1024 * 1024;
long maxMemory = rt.totalMemory() / mb;
long usedMemory = (rt.totalMemory() - rt.freeMemory()) / mb;

jProgressBar1.setMaximum((int) max); 
jProgressBar1.setValue((int) usedMemory);

Sim, é uma aplicação desktop.

Eu daria uma olhada específica na memória heap, pode estar estourando (e é a causa mais comum de problemas).
Aqui tem um exemplo de como fazer isso.

Além disso, o bom e velho debug é sempre teu amigo e, diria mais, guia.

Acabei resolvendo esse problema alguns dias depois, mas como dificilmente entro no GUJ, na época esqueci de postar a solução aqui.
Precisei apenas atualizar a biblioteca jasperreports-5.0.0.jar para a jasperreports-5.6.0.jar, e atualizar a JRE para uma versão mais recente, assim a aplicação parou de fechar ao gerar os relatórios.