[英]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
具有JList
与cellrender
显示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.