简体   繁体   English

无法转换为 java.Lang.Comparable

[英]Cannot cast to java.Lang.Comparable

I have two JFrames :我有两个JFrames

JFrameA have a JList with a cellrender to display Cita objects, and a JPopupMenu that trigger a JFrameB to set and remove elements from the JList . JFrameA具有JListcellrender显示Cita对象,和一个JPopupMenu该触发器的JFrameB从设置和删除元素JList

public class JFrameA extends javax.swing.JInternalFrame {

    public static DefaultListModel model = new DefaultListModel();
    HashMap<Cita, Icon> elementos = new HashMap();
    Cita cita;

    //method to retrieve from DB the objects
    private void fillJList(){
        //create object to add to the model
        while(rs.next()){
            Cita = new Cita(rs.getTime("TimeColumn").....);
            model.addElement(cita);
            elementos.put(cita, aIcon);
        }
        jlistDia.setModel(model);
        RenderJList render = new RenderJList(elementos);
        JList.setCellRenderer(render);
    }

JFrameB receive a Cita object to update it and set it to the model of the JFrameA JFrameB收到Cita对象更新,并将其设置为模型JFrameA

public class JFrameB extends javax.swing.JFrame {
    Cita objectToModify;

    public JFrameB(Cita objetToModify){
        this.objectToModify=objectToModify;
    }

    private void updates(){
        //get the new data of the object to set the JList of frameA
        Cita updatedObject = new Cita();
        JFrameA.model.set(objectToModify.getIndex(), updatedObject);
        //JFrameA.model is updated with no problems, but I want to sort the Cita objects by a Time param.
        sortModel(VistaDiaria.m);
    }

    private void sortModel(DefaultListModel model) {
        List<Cita> list = new ArrayList<>();
        for (int i = 0; i < model.size(); i++) {
            list.add((Cita) model.get(i));
        }
        Collections.sort(list);
        model.removeAllElements();
        for (Cita s : list) {
            model.addElement(s);
        }
    }

The method sortModel throw an ClassCastException and I don't know why, my Cita class implements Comparable this is the StackTrace i got. sortModel方法抛出一个ClassCastException ,我不知道为什么,我的Cita类实现了 Comparable,这是我得到的 StackTrace。

java.lang.ClassCastException: expeDiente.Cita cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:316)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:184)
at java.util.Arrays.sort(Arrays.java:1244)
at java.util.Collections.sort(Collections.java:166)

Cita class: Cita类:

    import java.text.SimpleDateFormat;
    import java.sql.Time;

    public class Cita implements Comparable<Cita> {

    public Time horaInicio;
    public Time horaTermino;
    public Paciente paciente;
    public String actividad;
    public String observacion;
    public String recordar;
    public String ciudad;
    public String TipoCita;
    public String fecha;
    public int idPaciente;
    public int idCita;

    public Cita() {
    }

    public Cita(String fecha, Time horaInicio, Time horaTermino, int idPaciente, String actividad,
            String observacion, String recordar, String ciudad, String tipoCita) {
        this.fecha = fecha;
        this.horaInicio = horaInicio;
        this.horaTermino = horaTermino;
        this.idPaciente = idPaciente;
        this.actividad = actividad;
        this.observacion = observacion;
        this.recordar = recordar;
        this.ciudad = ciudad;
        this.TipoCita = tipoCita;
    }

    public Cita(int idCita, String fecha, Time horaInicio, Time horaTermino, Paciente paciente, String actividad,
            String observacion, String recordar, String ciudad, String tipoCita) {
        this.idCita = idCita;
        this.fecha = fecha;
        this.horaInicio = horaInicio;
        this.horaTermino = horaTermino;
        this.paciente = paciente;
        this.actividad = actividad;
        this.observacion = observacion;
        this.recordar = recordar;
        this.ciudad = ciudad;
        this.TipoCita = tipoCita;
    }

    @Override
    public int compareTo(Cita o) {
        return (getHoraInicio().compareTo(o.getHoraInicio()));
    }

    public int getIdCita() {
        return idCita;
    }

    public void setIdCita(int idCita) {
        this.idCita = idCita;
    }

    public Time getHoraInicio() {
        return horaInicio;
    }

    public void setHoraInicio(Time horaInicio) {
        this.horaInicio = horaInicio;
    }

    public Time getHoraTermino() {
        return horaTermino;
    }

    public void setHoraTermino(Time horaTermino) {
        this.horaTermino = horaTermino;
    }

    public Paciente getPaciente() {
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public String getActividad() {
        return actividad;
    }

    public void setActividad(String actividad) {
        this.actividad = actividad;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getRecordar() {
        return recordar;
    }

    public void setRecordar(String recordar) {
        this.recordar = recordar;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getTipoCita() {
        return TipoCita;
    }

    public void setTipoCita(String TipoCita) {
        this.TipoCita = TipoCita;
    }

    public int getIdPaciente() {
        return idPaciente;
    }

    public void setIdPaciente(int idPaciente) {
        this.idPaciente = idPaciente;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 71 * hash + this.idCita;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cita other = (Cita) obj;
        if (this.idCita != other.idCita) {
            return false;
        }
        return true;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    @Override
    public String toString() {
        SimpleDateFormat formatoInicio = new SimpleDateFormat("hh:mm");
        SimpleDateFormat formatoTermino = new SimpleDateFormat("hh:mm aa");
        return paciente.getNombre() + ", "
                + formatoInicio.format(horaInicio) + "-"
                + formatoTermino.format(horaTermino);

    }

}

Your Cita class as shown here doesn't compile.此处显示的Cita类无法编译。 So the compiled version that your other classes are seeing is not this one.所以你的其他类看到的编译版本不是这个。 If you can fix the compile errors in your Cita class, the other classes will start working OK too.如果您可以修复Cita类中的编译错误,其他类也将开始正常工作。

编译器使用的定义不是我的 Cita 类的最后一个实现,我更改了包的名称并替换了 jar 和导入,并且它有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM