无法强制转换为java.Lang.Comparable

时间:2014-04-08 19:16:00

标签: java swing sorting exception comparable

我有两个JFrames

JFrameAJListcellrender来显示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收到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);
        }
    }

方法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上课:

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

    }

}

2 个答案:

答案 0 :(得分:1)

此处显示的Cita课程没有编译。所以你的其他类看到的编译版本不是这个。如果您可以修复Cita类中的编译错误,其他类也将开始正常工作。

答案 1 :(得分:0)

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