Boa noite, vi que teve muita gente com esse erro por aqui mas depois de ler muitos dos tópicos não achei nenhuma solução, uma vez que o problema sempre parecia algo bem especifico de cada situação.
Bem, na minha é o seguinte, minha tabela é criada em tempo de execução através de um select e usando um tablemodel de uma biblioteca que eu vi numa vídeo aula,ate então eu tinha um método que fazia essa atualização da tabela num botão e funcionava 100%, agora eu criei um job para rodar esse método a cada 5 s (vou aumentar esse tempo depois dos testes) utilizando o framework Quartz. O código continua rodando e funcionando mas as vezes ele da esse erro de que estourou o array, sei que o job ta de boa porque pedi para ele printar “teste” sempre que rodasse.
erro :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at javax.swing.JTable$2.getUpperBoundAt(JTable.java:3221)
at javax.swing.JTable$5.getUpperBoundAt(JTable.java:3321)
at javax.swing.JTable.adjustSizes(JTable.java:3334)
at javax.swing.JTable.adjustSizes(JTable.java:3326)
at javax.swing.JTable.setWidthsFromPreferredWidths(JTable.java:3240)
at javax.swing.JTable.doLayout(JTable.java:3128)
at java.awt.Container.validateTree(Container.java:1693)
at java.awt.Container.validateTree(Container.java:1702)
at java.awt.Container.validateTree(Container.java:1702)
at java.awt.Container.validate(Container.java:1628)
at javax.swing.RepaintManager$3.run(RepaintManager.java:704)
at javax.swing.RepaintManager$3.run(RepaintManager.java:702)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:701)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1719)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Construtor da classe principal onde é referenciado o Job:
public TelaSistema() throws SchedulerException {
initComponents();
conexao = ModuloConexao.conector();
//Define um job e referecnia a classe job
JobDetail job= JobBuilder.newJob(QuartzJob.class).build();
//executa job a cada 5 segundos
Triggert1=TriggerBuilder.newTrigger().withIdentity("TriggerCronológico").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(05).repeatForever()).build();
Scheduler sc=StdSchedulerFactory.getDefaultScheduler();
sc.start();
sc.scheduleJob(job, t1);
}
Job :
public class QuartzJob implements Job {
//variaveis de uso no BD
Connection conexao = null;
PreparedStatement pst = null;
ResultSet rs = null;
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
conexao = ModuloConexao.conector();
String sql = "SELECT ocorrencia.numero as 'Número', cliente.nome as 'Cliente',ocorrencia.categoria as 'Categoria',ocorrencia.descricao as 'Descrição',ocorrencia.historico as 'Histórico',DATE_FORMAT(ocorrencia.data_abertura, '%d/%m/%Y %H:%i') AS 'Abertura', usuario_ocorrencia.nome as 'Usuário',usuario_responsavel.nome as 'Responsável', ocorrencia.status as 'Status' FROM ocorrencia inner join cliente ON cliente.id_cliente_pk=ocorrencia.id_cliente_ocorrencia_fk inner join usuario usuario_ocorrencia on usuario_ocorrencia.id_usuario_pk=ocorrencia.id_usuario_ocorrencia_fk inner join usuario usuario_responsavel on usuario_responsavel.id_usuario_pk = ocorrencia.id_responsavel_ocorrencia_fk WHERE ocorrencia.id_responsavel_ocorrencia_fk= ?";
try {
pst = conexao.prepareStatement(sql);
//passando o conteudo da cx de pesquisa para o ?
pst.setString(1, txtPKUsuarioLogado.getText());
rs = pst.executeQuery();
//usando biblioteca DbUtils; para preencher a tabela
tableServicosAbertos.setModel(DbUtils.resultSetToTableModel(rs));
rs.close();
pst.close();
conexao.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e);
}
System.out.println("testeJob"+new Date());
}
}
