Olá, bom tentei implentar uma Thread para gerar relatórios porem não está funcionando continua travando a aplicação, estou fazendo algo errado?
Obrigado.
publicclassThreadRelatorioClientesimplementsRunnable{publicThreadRelatorioClientes(){}@Overridepublicvoidrun(){iniciaCarregar();try{EventQueue.invokeLater(newRunnable(){@Overridepublicvoidrun(){try{newGerar().geraRelatorio("Clientes.jasper","Relatório de Clientes",0);}catch(JRExceptionex){Logger.getLogger(Principal.class.getName()).log(Level.SEVERE,null,ex);}catch(SQLExceptionex){Logger.getLogger(Principal.class.getName()).log(Level.SEVERE,null,ex);}}});}catch(Exceptione){}finally{paraCarregar();}return;}}
O invokeLater não cria nenhuma thread. Ela pega o código de um Runnable e roda na Thread do Swing. Caso você esteja num código de botão (que já está na thread do Swing), uma chamada a invokeLater simplesmente executará o Runnable.
Para criar novas threads, use a classe Thread e o método start().
Dentro da nova thread, aí sim, você usa o invokeLater para alterar o status do que for componente Swing. Mas com certeza essa linha não pode estar num invokeLater:
newGerar().geraRelatorio("Clientes.jasper","Relatório de Clientes",0);
R
RogerioK
[quote=ViniGodoy]O invokeLater não cria nenhuma thread. Ela pega o código de um Runnable e roda na Thread do Swing. Caso você esteja num código de botão (que já está na thread do Swing), uma chamada a invokeLater simplesmente executará o Runnable.
Para criar novas threads, use a classe Thread e o método start().
Dentro da nova thread, aí sim, você usa o invokeLater para alterar o status do que for componente Swing. Mas com certeza essa linha não pode estar num invokeLater:
newGerar().geraRelatorio("Clientes.jasper","Relatório de Clientes",0);
Você está errando ao chamar aquela linha que indiquei no invokeLater. Isso vai fazer com que essa Thread devolva o processamento para a Thread do Swing e aí, a tela trava.
R
RogerioK
Consegui, era isso mesmo! estava batendo cabeça aqui há algum tempo! obrigado!
J
javer
Desculpe mexer nesse assunto ainda, mas gostaria da opinião do ViniGodoy sobre esse meu código que faz algo semelhante. Não tenho certeza sobre a abordagem de gerar o relatório dentro do JDialog está correta.
Tenho esse método que retorna um JDialog com o JViewer dentro dele: