【问题标题】:Cannot cast to java.Lang.Comparable无法转换为 java.Lang.Comparable
【发布时间】:2014-04-08 19:15:59
【问题描述】:

我有两个JFrames

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

    }

}

【问题讨论】:

  • List&lt;Cita&gt; list = new ArrayList&lt;&gt;(); 你试过把它改成List&lt;Cita&gt; list = new ArrayList&lt;Cita&gt;();吗?
  • @SpacePope 从 Java 7 开始就是有效的 Java。
  • 啊,对;这就是我一直使用 Java 6 工作所得到的...
  • @JoseMiguelLedón 看起来您正在从另一个包中导入此 Cita 类,这不是您所看到的实现。
  • 这可能是Cita 类的当前代码,但不是编译器使用的定义。

标签: java swing sorting exception comparable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多