[RESOLVIDO] Erro Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

Boa tarde

Estou com este erro

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

Não estou conseguindo resolver

protected void mostrarVendas(List vendas) {
while (tmVendas.getRowCount() > 0) {
tmVendas.removeRow(0);
}
if (vendas.size() == 0) {
JOptionPane.showMessageDialog(this, “Nenhuma venda encontrada!”);
} else {
String[] campos = new String[]{null, null, null};
for (int i = 0; i < vendas.size(); i++) {

	String data_inclusao = String.valueOf(vendas.get(i).getData_inc());
	Date data_inc = null;
	try {
	    data_inc = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(data_inclusao);
	} catch (ParseException ex) {
	    Logger.getLogger(VendasConsulta.class.getName()).log(Level.SEVERE, null, ex);
	}
	String dataBanco_inc = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(data_inc);

	ClientesDAO clientesDAO = new ClientesDAO();
	int id_cliente = vendas.get(i).getId_cliente();
	String nome_cliente = clientesDAO.buscaClientePorId(id_cliente);

	UsuarioDAO usuarioDAO = new UsuarioDAO();
	int id_usuario = vendas.get(i).getId_usuario();
	String nome_usuario = usuarioDAO.buscaUsuarioPorId(id_usuario);

	tmVendas.addRow(campos);
	tmVendas.setValueAt(dataBanco_inc, i, 0);
	tmVendas.setValueAt(nome_cliente, i, 1);
	tmVendas.setValueAt(nome_usuario, i, 2);
	tmVendas.setValueAt(vendas.get(i).getTotal(), i, 3);

    }
}
}

O erro ocorre quando alguma linha é selecionada, depois que eu aperto o botão pesquisar

Pq vc fica adicionando o mesmo vetor de 3 posições NULAS como linha na sua tabela e depois insere manualmente os dados em cada coluna?
Pq n cria direto o vetor com os dados que quer inserir? vai poupar mto trabalho e quem sabe até resolver seu problema.
DefaultTableModel já é HORRÍVEL, mas ao menos tente n deixar o código como tal. Considere criar seu próprio tableModel.

como eu faria?

me de um exemplo por favor @Rodrigo_Void

sobre o seu vetor, n tem exemplo, vc tm q fazer:
1- O vetor vc precisa criar dentro do laço.
2 - Ao invés de passar null pras posições vc passa os valores destas colunas.
É mais facil q a gambiarra q tem ai.

Sobre criar seu tablemodel o google lhe responderá mto bem.

Eu fiz isto mas não deu certo @Rodrigo_Void

tmVendas = (DefaultTableModel) tbVendas.getModel();
int linha = tbVendas.getModel().getRowCount();

for (int i = linha - 1; i >= 0; i--) {

tmVendas.setNumRows(0);
}

e onde está o código q faz isso?

eu substitui por

protected void mostrarVendas(List vendas) {
while (tmVendas.getRowCount() > 0) {
tmVendas.removeRow(0);
}

VC chegou a ler oq eu disse no tópico acima?
1- Cadê o vetor q era pra criar dentro do laço?
2- Cadê os dados q eram pra ser passados pra esse vetor?

Eu acho q vc n ta sabendo nem oq cada código faz. Ai fica difícil mesmo, recomendo voltar pro tutorial.

Oi Maks_Silva com o intuito de te ajudar fiz um video comentando o possivel erro no seu codigo e algumas outras coisas que notei.
Video: https://youtu.be/gKbmSee_nUA

1 curtida

https://drive.google.com/open?id=0B-N9hZTOQeWNeWFjTDlEWm45a2c
link do sistema

Kara nao acredito q vc fez um video show, muito obrigado, ja estou vendo o seu video, me inscrevi e curti.

Vc fez a diferenca, tem gente q ajuda mandando a gente se virar, mas aqui muitas vezes eh o ultimo caso q a gente pede ajuda.

Muito agradecido

1 curtida

Obrigado por se inscrever. E foi um prazer ajudá-lo.

realmente estava faltando o null,
concordo com vc sobre os DAOS, pois tenho outra tela de cadastro de produtos, e nao ocorre problemas pois la so tem um DAO

Acho q o problemas sao os DAOs.

O problema persiste?

Sim

Qual agora?

esse código é identico a da tela de cadastro de produtos, e nao da problema, como vc disse vários DAOS deve estar dando esse problema.

mudei o código

private void pesquisar_venda() {
if (jtData_inicial.getText().equals(" / / “)) {
JOptionPane.showMessageDialog(this, “Preencha o campo data inicial.”);
jtData_inicial.requestFocus();
} else if (jtData_final.getText().equals(” / / ")) {
JOptionPane.showMessageDialog(this, “Preencha o campo data final.”);
jtData_final.requestFocus();
} else {

    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

    Date datainicial = null;
    Date datafinal = null;
    try {
	datainicial = format.parse(jtData_inicial.getText());
	datafinal = format.parse(jtData_final.getText());
    } catch (ParseException ex) {
	Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
    }
    if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
	String sql = "SELECT venda.data_inc as Data, \n"
		+ " clientes.nome AS Nome,\n"
		+ " usuario.usuario AS Usuário,\n"
		+ " venda.total as Total\n"
		+ "FROM venda\n"
		+ " INNER JOIN clientes ON \n"
		+ "  venda.id_cliente = clientes.id \n"
		+ " INNER JOIN usuario ON \n"
		+ "  venda.id_usuario = usuario.id \n"
		+ "     \n"
		+ "     where venda.data_inc between ? and ?"; // perceba as interrogações representando os parametros
	try {
	    pst = conexao.prepareStatement(sql);
	    pst.setDate(1, new java.sql.Date(datainicial.getTime())); // 1 para a primeira interrogação 
	    pst.setDate(2, new java.sql.Date(datafinal.getTime()));   // 2 para a segunda interrgação
	    rs = pst.executeQuery();
	    tbVendas.setModel(DbUtils.resultSetToTableModel(rs));
	} catch (SQLException ex) {
	    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
	} catch (NullPointerException ex) {
	    JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
	}
    }
}
}

ele funciona, mas nao gera o relatorio do dia, acho q ta faltando encaixar esse codigo aqui em baixo.

String dataInicial = new SimpleDateFormat(“yyyy-MM-dd 00:00:00”).format(datainicial);
String dataFinal = new SimpleDateFormat(“yyyy-MM-dd 23:59:59”).format(datafinal);

para ele começar do 00:00:00 e finalizar 23:59:59.

Não sei como encaixa lo

Descobri o problema

Comentei este código

   // tmVendas = (DefaultTableModel) tbVendas.getModel(); Obrigado a comentar
    //tmVendas.setNumRows(0);

e acabou o erro

Graças a Deus

Olha fiz esse topico com um exemplo de DefaultTableModel

top