Erro String cannot be cast to br.com.sgef.model.Veiculo

Estou deseperado com esse erro tenho uma classe model de Veiculo, outra Classe DAO e esse erro ocorre quando vou alterar o registro dentro da aplicação.

Vou postar o metodo alterar

private void alterar() {    
    String sql = "update tbl_viagem set idVeiculo=?, dataa=?, idMotorista=?, percurso=?, adiantamento=?, freteIda=?, freteVolta=?, totalEntrada=?,kmIda=?,kmVolta=?,qtdLitros=?,media=?,kmPercorrido=?,liquidoComAdiantamento=?,freteReceber=?,liquidoViagem=?,oleoDiesel=?,arla=?,pedagio=?,comissao=?,acessorio=?,estacionameto=?,chapa=?,gorjeta=?,outrasDesp=?,totalSaida=?  where idViagem=?";
    try {
    
    //AQUI É FORMATADO A DATA DE DD/MM/YYYY PARA => YYYY/MM/DD
    //SE ALERTAR NA PST 2 
    String x = txtData.getText();

    SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
    String str = x;
    java.util.Date data = formatador.parse(str);

    Veiculo veiculo = (Veiculo) cboCaminhao.getSelectedItem();
    Motorista motorista = (Motorista) cboMotorista.getSelectedItem();

    pst.setInt(1, (int) cboCaminhao.getSelectedItem());
    pst.setDate(2, new java.sql.Date(data.getTime()));
    pst.setShort(3, (short) (int) cboMotorista.getSelectedItem());
    pst.setString(4, txtPercurso.getText());
    pst.setString(5, txtAdiantamento.getText());
    pst.setString(6, txtFreteIda.getText());
    pst.setString(7, txtFreteVolta.getText());
    pst.setString(8, txtTotalEntrada.getText());
    pst.setString(9, txtKmIda.getText());
    pst.setString(10, txtKmVolta.getText());
    pst.setString(11, txtQtdLitros.getText());
    pst.setString(12, txtMedia.getText());
    pst.setString(13, txtKmPercorrido.getText());
    pst.setString(14, txtLiquidoAdiant.getText());
    pst.setString(15, txtFreteReceber.getText());
    pst.setString(16, txtLiquidoViagem.getText());
    pst.setString(17, txtDiesel.getText());
    pst.setString(18, txtArla.getText());
    pst.setString(19, txtPedagio.getText());
    pst.setString(20, txtComissao.getText());
    pst.setString(21, txtAcessorio.getText());
    pst.setString(22, txtEstacionamento.getText());
    pst.setString(23, txtChapa.getText());
    pst.setString(24, txtGorjeta.getText());
    pst.setString(25, txtOutro.getText());
    pst.setString(26, txtTotalSaida.getText());
    pst.setString(27, txtCod.getText());
    
    
    if ((txtData.getText().isEmpty()) || (txtPercurso.getText().isEmpty()) || (txtFreteIda.getText().isEmpty()) || (txtFreteVolta.getText().isEmpty()) || (txtLiquidoViagem.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 do Fechamento de Viagem Alterado com Sucesso !!!");
            // as linhas abaixo limpam os campos
            txtCod.setText(null);
            cboCaminhao.setSelectedItem(null);
            txtData.setText(null);
            cboMotorista.setSelectedItem(null);
            txtPercurso.setText(null);
            txtAdiantamento.setText(null);
            txtFreteIda.setText(null);
            txtFreteVolta.setText(null);
            txtTotalEntrada.setText(null);
            txtKmIda.setText(null);
            txtKmVolta.setText(null);
            txtQtdLitros.setText(null);
            txtMedia.setText(null);
            txtLiquidoAdiant.setText(null);
            txtFreteReceber.setText(null);
            txtLiquidoViagem.setText(null);
            txtDiesel.setText(null);
            txtArla.setText(null);
            txtPedagio.setText(null);
            txtComissao.setText(null);
            txtAcessorio.setText(null);
            txtEstacionamento.setText(null);
            txtChapa.setText(null);
            txtOutro.setText(null);
            txtTotalSaida.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);
}
}

O item em questão é uma String. Quando você pega uma instância de objeto String (ou qualquer outra classe) e tenta converter para uma instância de objeto de um tipo que não é a própria String (ou a outra classe qualquer) e nem suas subclasses (String não tem subclasses), ocorre esse erro.
Reveja tua lógica.

Qual seria a possivel Solução o método salvar utiliza essa mesma lógica e ocorre tudo normal :frowning:

Onde você declara o tal JComboBox? Onde você o popula? O que utiliza para popular as opções do JComboBox?

Aqui usei dessa Forma para popular

public TelaViagem() {
        initComponents();
        conexao = ModuloConexao.conector();
        
        
        VeiculoDAO Vdao = new VeiculoDAO();
        MotoristaDAO Mdao = new MotoristaDAO();
        
        for(Veiculo v: Vdao.read()){
            cboCaminhao.setSelectedItem(null); 
            cboCaminhao.addItem(v);
   
        }
        
        for(Motorista m: Mdao.read()){
            cboMotorista.setSelectedItem(null);
            cboMotorista.addItem(m);
        }
        
    }

Esse é o único lugar onde você adiciona itens ao cboCaminhao?

Isso aqui também está errado:

pst.setInt(1, (int) cboCaminhao.getSelectedItem());

Se o cboCaminhao foi populado com instâncias de Veiculo, como é que você espera fazer um cast para int?

Mesma coisa isso aqui:

pst.setShort(3, (short) (int) cboMotorista.getSelectedItem());

Como você espera fazer um cast de Motorista para int e depois ainda para short?

Tentativa e erro?