Problemas na EDT

4 respostas
Ironlynx
Fazendo um refactoring aqui, caí nesse código que importa de um arquivo .csv salva no BD e exibe numa JTable os dados:
try {   f = new File(fileName2);
	 final ImportProgress p = new ImportProgress();
     p.setVisible(true);
     SwingWorker<?, ?> worker = new SwingWorker<Object, Object>(){
         @Override
         protected Object doInBackground() throws Exception {
        	 DBImport.importNTC(f,Conexao.getConnection());// meu processo demorado
        	  String sql ="SELECT * FROM NTC_MANUTENCAO ORDER BY LOCLZ_CLASS";//meu select para exibição
  			try{
  				tabela.setQuery(sql);  				
  				tfTotReg.setText( "" + DBUtils.contaRegistroNTC(Conexao.getConnection())) ;
  				for(int c=0; c<jTable.getColumnCount(); c++) {			           
  					packColumn(jTable, c, 2);
			    }
  				 				 
  			}catch(Exception e){
  				JOptionPane.showMessageDialog(null,"Falha na importação!","A Importação de dados falhou!",JOptionPane.ERROR_MESSAGE);
  				e.printStackTrace();
  			}  			
              return null;
         }
         @Override
         protected void done() {
              p.setVisible(false);
         }
    };
    worker.execute();

	 	 }catch (Exception fileNotFoundException){
JOptionPane.showMessageDialog(null, "Erro ao Ler o Arquivo de Dados!","Mensagem de Erro", JOptionPane.INFORMATION_MESSAGE);
							return ;
				 }
Ele ás vezes manda uma stack: Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException: Vector Enumeration at java.util.Vector$1.nextElement(Vector.java:305) at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(BasicTableUI.java:1684) at javax.swing.JComponent.getPreferredSize(JComponent.java:1634) at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769) at java.awt.Container.layout(Container.java:1421) at java.awt.Container.doLayout(Container.java:1410) at java.awt.Container.validateTree(Container.java:1507) at java.awt.Container.validate(Container.java:1480) at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:669) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:124) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Mas o curioso é: isso só ocorre com um arquivo pequeno(nem 1MB, 3000 linhas, 20 colunas).Num arquvo com 50000 linhas e mais de 20MB(53 colunas), não trava. :!: >

4 Respostas

E

Eu imagino que você teria de chamar packColumn (que faz a mesma coisa que o packColumn do www.exampledepot.com, eu suponho) usando um SwingUtilities.invokeLater, já que ele tem de executar na thread do Swing, não na thread do seu SwingWorker.

Ironlynx

Hum, é verdade(e olhando o código aqui, o packColumn é o mesmo).E eu nem estou certo sobre esse SwingWorker aí… essa ImportProgress é uma ProgressBar que fica aparecendo enquando os dados vão sendo salvos e exibidos na JTable.Mas eu estou curioso pq trava no arquivo menor e não no que é 40x maior.

Ironlynx

Ah, algo que não postei: o invokeLater não dá travamento de GUI, mas congela a minha ProgressBar no final da execução(depois sai da execução normalmente).O engraçado é que eu não descobri o motivo de um arquivo tão pequeno travar a GUI e o outro monstro passar em branco.

Ironlynx

Algo chato:
além daquele packColumn tenho outras 2,3 chamadas de método que fazem uma atualização na tela.Percebi que o invokeLater permite a atualização da JTable e os Labels, mas trava a ProgressBar por uns 5 segundos legal.Adoraria que o java tivesse um escalonador natural para quando muitos componentes precisassem ser atualizadosem série. :stuck_out_tongue:

Criado 17 de agosto de 2012
Ultima resposta 19 de ago. de 2012
Respostas 4
Participantes 2