String cannot be cast to

Alguem poderia me ajudar Estou precisando muito da solução desse erro.
tenho uma tela de cadastro de fornecedor e outra de contas a pagar consigo add uma conta a pagar tranquilamente mas na hora de alterar dá esse erro " String cannot be cast to " é no jcombobox que trago os fornecedores na tela de contas a pagar.

public TelaContaPagar() {
initComponents();

conexao = ModuloConexao.conector();
FornecedorDAO Fdao = new FornecedorDAO();

for (Fornecedor f : Fdao.read()) {
    cboFornecedor.setSelectedItem(null);
    cboFornecedor.addItem(f);
    
}

}

método alterar

private void alterar() {
        String sql = "update tbl_contaspagar set descricao=?, pago=?, data_vencimento=?, especie=?, valor=?, idFornecedor=? where idContasP=?";
        try {

            pst = conexao.prepareStatement(sql);
            String x = txtDataVenc.getText();
 
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
            String str = x;
            java.util.Date data = formatador.parse(str);
            
            
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            x = format.format(data);
            //System.out.println(x);
           
            
            Fornecedor fornecedor = (Fornecedor) cboFornecedor.getSelectedItem();
            
            
            pst.setString(1, txtDesc.getText());
            pst.setString(2, cboPago.getSelectedItem().toString());
            pst.setString(3, x);
            pst.setString(4, txtEspecie.getText());
            pst.setString(5, txtValor.getText());
            pst.setInt(6, fornecedor.getId());
            pst.setString(7, txtCod.getText()); 

            if ((txtDesc.getText().isEmpty()) || (txtDataVenc.getText().isEmpty()) || (txtValor.getText().isEmpty())) {
                JOptionPane.showMessageDialog(null, "Preencha Todos os Campos Obrigatórios (*)");
                

            } else {
            
                // a linha abaixo atualiza a tabela de Usuarios com os dados do Formulário
                // a estrutura abaixo é usada para confirmar a alteração de dados na tabel
                int adicionado = pst.executeUpdate();
                // a linha abaixo serve como entendimento da logica.
                //System.out.println(adicionado);
                
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Dados Alterado com Sucesso !!!");
                    // as linhas abaixo limpam os campos
       
                    txtCod.setText(null);
                    txtDesc.setText(null);
                    txtDataVenc.setText(null);
                    txtEspecie.setText(null);
                    txtPesquisar.setText(null);
                    txtValor.setText(null);
                    
                   
                    // Limpar campo combobox porem não é necessário, pode prejudicar o sistema
                    //cboUsoPerfil.setSelectedItem(null);
                    btnSave.setEnabled(true);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
   
    }

Cannot be cast to…

Isso significa que não pode ser convertido, não pode ser convertido a quê???

 pst.setString(2, (String) cboPago.getSelectedItem());

Não é o cboPago e sim o cboFornecedor. Se eu abrir o jcombobox e selecionar ele altera mas se eu não ativar nao abrir o jcombobox ele da o erro

Faz uma condição então,

String a = null;
if(!combo.getSelectedItem() == null){
   a = "N/D";  
} else {
   a = combo.getSelectedItem().toString();  
}

Não funcionou :frowning:

pq nao funcionou? deu erro? o que acontece?

não retorna nada

cara, suas respostas estão muito amplas, muito genéricas.

Troca isso:

 } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }

por isso:

        } catch (Exception e) {
            e.printStackTrace();     
        }

Me retorna o mesmo erro

java.lang.ClassCastException: java.lang.String cannot be cast to br.com.sgef.model.Fornecedor
at br.com.sgef.telas.TelaContaPagar.alterar(TelaContaPagar.java:254)

linha 254

Fornecedor fornecedor = (Fornecedor) cboFornecedor.getSelectedItem();

vc tem que pegar a String do combo

String resultado = (String) cboFornecedor.getSelectedItem();

mas o erro esta na linha 254

Fornecedor fornecedor = (Fornecedor) cboFornecedor.getSelectedItem();

o combo esta como String mas no banco leva o id do fornecedor ja cadastrado

Era pra vc trocar de fornecedor pra String, vc tentou?

O combo é um objeto, vc está tentando recuperar uma Classe dele. Pra resolver o seu problema é só fazer o que fiz ali em cima:

String resultado = (String) cboFornecedor.getSelectedItem();

Não faz assim!
Utiliza um ComboBoxModel para renderizar a lista de Fornecedor retornada pelo Fdao.read().
Aí você não precisa desse laço.

Depois recupera os objetos selecionados da seguinte forma:

int linhaSelecionada = cboFornecedor.getSelectedIndex();
Fornecedor fornecedor = listaDeFornecedores.get(linhaSelecionada);