Erro ao fazer o INSERT numa tabela com relacionamentos[Resolvido]

Estou Inserindo dados em uma tabela que se relaciona com outras duas, porém quando aciono meu bloco de comandos ele acusa esse erro:

24/06/2012 22:31:43 Visao.TCompras btnEmitirNotaActionPerformed
GRAVE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`dtlink`.`entradaproduto`, CONSTRAINT `entradaproduto_ibfk_2` FOREIGN KEY (`idproduto`) REFERENCES `produtos` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

O estranho é que com este mesmo bloco de comandos eu consegui inserir dados na primeira vez, mas quando fui inserir novamente, apresentou este erro e não parou mais.

pposte seus bean

O método que estou utilizando é esse:

   private void emitindoNota() throws Exception{
        String codFornecedor=campoFornecedor.getSelectedItem().toString().replaceAll("\\D","");
        String[] dt=campoDataNota.getText().split("/");
        String dataNota=dt[2]+"-"+dt[1]+"-"+dt[0];
        String[] dt1=campoDataEntrada.getText().split("/");
        String dataEntrada=dt1[2]+"-"+dt[1]+"-"+dt[0];
        PreparedStatement stmt=Conexao.connect().prepareStatement("INSERT INTO nfentrada (id,idfornecedor,serie,datarecpecao,dataemissao) VALUES (?,?,?,?,?);");
        stmt.setString(1,campoNumNota.getText());
        stmt.setString(2,codFornecedor);
        stmt.setString(3,campoSerie.getText());
        stmt.setString(4, dataNota);
        stmt.setString(5,dataEntrada);
        stmt.execute();
        Conexao.commit();
        for (int i = 0; i < tableNotaEntrada.getRowCount(); i++) {
            stmt=Conexao.connect().prepareStatement("INSERT INTO entradaproduto (idnfentrada,idproduto,valorvenda,quantidade,valortotal) VALUES (?,?,?,?,?);");
            stmt.setString(1,campoNumNota.getText());
            stmt.setString(2,tableNotaEntrada.getValueAt(i, 0).toString().replaceAll("\\D",""));
            stmt.setString(3,tableNotaEntrada.getValueAt(i, 2).toString());
            stmt.setString(4,tableNotaEntrada.getValueAt(i, 1).toString());
            stmt.setString(5,tableNotaEntrada.getValueAt(i, 3).toString());
            stmt.execute();
            Conexao.commit();
        }
        stmt=Conexao.connect().prepareStatement("UPDATE produtos SET estoque=? WHERE id=?;");
        for (int i = 0; i < tableNotaEntrada.getRowCount(); i++) {
            stmt.setString(1,tableNotaEntrada.getValueAt(i,1).toString());
            stmt.setString(2,tableNotaEntrada.getValueAt(i,0).toString().replaceAll("\\D",""));
            stmt.execute();
        }
        Conexao.commit();
        JOptionPane.showMessageDialog(null,"Nota Fiscal cadastrada com sucesso!!!","OK",JOptionPane.INFORMATION_MESSAGE);
    }

A mensagem diz que está faltando passar um valor para o campo idproduto que corresponda a um registro que exista na tabela produtos. Examine essa linha:

Já fiz de tudo, mas continua dando este erro.
Eu acredito que o erro está no SQL, mas não sei exatamente o que pode ser.
Se alguém puder dar uma dica, estou procurando na internet o que pode ser, mas não estou achando nada parecido.
O estranho é que a primeira vez que rodei o programa, ele inseriu direitinho.

O erro está no produto que estás a inserir em entradaproduto, que não existe na tabela produtos.

pmlm e ADEMILTON.
Após vocês dois dizerem a mesma coisa, resolvi deixar de preguiça e debuguei o projeto, também usei alguns observadores para não fazer mais serviço de relaxado.
Então percebi que vocês estavam certos, o problema era naquela linha mesmo, ADEMILTON.

stmt.setString(2,tableNotaEntrada.getValueAt(i, 0).toString().replaceAll("\\D",""));

O caso é que esta linha faz o seguinte, pega a String que está no jtable e tira todas as letras, ficando somente os números, porém como tinha números ali que eu não contava que estavam lá acabavam alterando o número do cadastro que estava querendo inserir.
Agora alterei e funcionou direitinho.
Abraços e até mais.