Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Man könnte hashCode dafür benutzen, viele Klassen aus java.* haben das sinnvolle Implementierungen. Für eigene Klassen muss man die aber noch selbst implementieren.
Das ist aber gefährlich, da können viele Änderungen "übersehen" werden.
hashCode kann für Instanzen mit unterschiedlichen Werten den selben Hash-Wert zurückliefern.
Ändert sich der HashCode, so hat sich auch was an der Instanz geändert, das ist klar, aber damit betrachten man das Problem dennoch aus der falschen Perspektive.
Das ist aber gefährlich, da können viele Änderungen "übersehen" werden.
hashCode kann für Instanzen mit unterschiedlichen Werten den selben Hash-Wert zurückliefern.
Der HashCode ändert sich doch, aber nicht immer.
Die Klasse Windows:
Code:
public class Window implements java.io.Serializable {
Window(String windowName) {
this.windowName = windowName;
}
private static final long serialVersionUID = 1068505166493971108L;
public String windowName = "Fenster Bezeichnung";
public String description = "Fenster Beschreibung";
public DefaultListModel<Point2D> lstModelRU_RealCoordinate = new DefaultListModel<Point2D>();
public DefaultListModel<Point2D> lstModelLU_RealCoordinate = new DefaultListModel<Point2D>();
public DefaultListModel<Point2D> lstModelRD_RealCoordinate = new DefaultListModel<Point2D>();
public DefaultListModel<Point2D> lstModelLD_RealCoordinate = new DefaultListModel<Point2D>();
public List<Long> timeStamp_RU = new ArrayList<Long>();
public List<Long> timeStamp_RD = new ArrayList<Long>();
public List<Long> timeStamp_LU = new ArrayList<Long>();
public List<Long> timeStamp_LD = new ArrayList<Long>();
public transient List<BufferedImage> imagesRU = new ArrayList<BufferedImage>();
public transient List<BufferedImage> imagesLU = new ArrayList<BufferedImage>();
public transient List<BufferedImage> imagesRD = new ArrayList<BufferedImage>();
public transient List<BufferedImage> imagesLD = new ArrayList<BufferedImage>();
public double windowDirectionView = 90;
Wenn ich aus lstModelRU_RealCoordinate, timeStamp_RU, imagesRU einen Eintrag lösche, erhalte ich dennoch denselben HashCode :-(
int index = lstPointsLU.getSelectedIndex();
if (index > -1) {
window.lstModelLU_RealCoordinate.remove(index);
window.imagesLU.remove(index);
window.timeStamp_LU.remove(index);
}
Vielleicht hast du tatsächlich "Pech" und der HashCode bleibt gleich (das kann passieren, siehe eine meiner vorherigen Anmerkungen).
Jetzt musst du entscheiden: Willst du das Problem, welches hier bei der Verwendung von hashCode auftritt, tatsächlich lösen, oder bist du eher an einer Lösung deines eigentlichen Problems interessiert?
Für letzteres kannst du bei einer Änderungen z.B. ganz einfach ein Flag setzen, welches du abfragen kannst. Beim Laden/Schreiben setzt du es dann wieder zurück. Wo und Wie man das gescheit am Besten macht, dafür hab ich zu wenig einblick in dein Projekt.
Ist ersteres der Fall: Dir fehlt vermutlich schlicht noch eine gescheite Implementierung von hashCode in der Klasse Window.
Die for-Schleife ist da fehl am Platz, damit schaufelst du dir einen Wartungsalptraum. Implementiere hashCode in der Klasse Window und lass deine andere hashCode-Methode (die aus ProjectSettings) ruhig so, wie sie war.