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

18 respostas Resolvido
java-sejavamysql
M

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

18 Respostas

R

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.

M

como eu faria?

me de um exemplo por favor @Rodrigo_Void

R

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.

M

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);
}
R

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

M

eu substitui por

protected void mostrarVendas(List vendas) {

while (tmVendas.getRowCount() > 0) {

tmVendas.removeRow(0);

}
R

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.

S

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

M

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

S

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

M

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.

S

O problema persiste?

M

Sim

S

Qual agora?

M

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

M
Solucao aceita

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

S

Olha fiz esse topico com um exemplo de DefaultTableModel

M

top

Criado 27 de junho de 2018
Ultima resposta 9 de jul. de 2018
Respostas 18
Participantes 3