WindowAdapter - Datensatz wird nicht komplett gespeichert

Status
Nicht offen für weitere Antworten.

ghummelll

Mitglied
Hallo Leute,

ich verzweifel grad wieder. Ich hab mal einen Screenshot von meiner GUI angehangen, damit ihr eine Vorstellung von der ganzen Geschichte bekommt. An jedem Eingabefeld und jeder Checkbox hängt ein ChangeListener, der den aktuellen Wert in einem Vector speichert. Mit einem Klick auf den Save-Button am unteren Ende des Frames wird dieser Vector dann ausgewertet und als .att-Datei gespeichert. Das klappt perfekt.

Nun habe ich beim Schließen des Fensters eine Abfrage reingehangen, die nach Änderungen sucht, die noch nicht manuell gespeichert wurden. Es erscheint dann entsprechend ein kleiner Frame, der den Nutzer fragt, ob die Änderungen gespeichert werden sollen oder nicht. Klickt man auf "Yes" wird exakt die selbe Methode aufgerufen, die auch von dem Save-Button aufgerufen wird. Aber irgendwas läuft beim Speichern an dieser Stelle verkehrt. Es fehlen mir dann haufenweise Checkbox-States.

Woran liegt denn sowas? Wie gesagt, es ist exakt die selbe Methode und die ChangeListener arbeiten völlig unabhängig von der Save-Methode. Es muss irgendwas im WindowAdapter sein, aber ich kann es mir nicht erklären...

Vielen Dank im Voraus und
Grüße aus Weimar
 

hdi

Top Contributor
Spontan fällt mir ein:
- Die Datei ist von einem vorherigem Zugriff blockiert (funktioniert 2x Speichern per Save-Button?)
=> Lass dir mal auf deinem att-File so Dinge ausgeben wie exists(), isWritable() o.ä.
- evtl falsche Referenzen in der Methode, die den Speichervorgang bearbeitet. Ist die statisch? Nutzt die auch sicher den gewünschten Vector?
=> Mal in einer for-each Schleife den Vector ausgeben lassen

Ansonsten befürchte ich kann man nicht so viel sagen ohne Code.
 

ghummelll

Mitglied
funktioniert 2x Speichern per Save-Button?
Funktioniert.

evtl falsche Referenzen in der Methode, die den Speichervorgang bearbeitet. Ist die statisch?
Methode ist nicht statisch. Habe mir diverse Outputs geben lassen: am interessantesten ist ja eigentlich vor und nach dem Speichern. Das funktioniert echt mit einem Klick auf den Button herrlich, nur in diesem speziellem Falle nicht. Der Witz ist auch, dass die fehlenden Daten eine gewissen Regelmäßigkeit aufweisen, also das Ändern eines bestimmten Attributes löscht immer die selben Daten. Konnte das System aber noch nicht erkennen.

Hab gerade versucht, das Problem einem Freund zu schildern, der nicht Informatiker ist. Situation: Du sitzt in deinem Auto und es lässt sich normal starten. Dann setzt du dich auf den Beifahrersitz, steckst den selben Schlüssel in das selbe Zündschloss, aber der Motor startet nicht mehr. Da stimmt doch was nicht.

Ich vermute ja irgendwas Java-internes, irgendwas mit Threads oder so... Dass er die Datenfelder zu dem Zeitpunkt noch nicht kennt, zu dem ich den WindowListener anlege. Das tu ich aber bewusst erst nach der Initialisierung/Zeichnung der Datenfelder. Hatte auch schon mal jemand dieses Problem und hat eine vernünftige Lösung gefunden?

Code freigeben darf ich glaub ich nicht, weil das meine Hiwi-Arbeit für die Uni ist und die reagieren auf sowas immer allergisch.

Liebe Grüße und einen schönen Abend noch.
 

hdi

Top Contributor
Also ich denke es ist ein Referenzierungsproblem. Also, als erste Anweisung in deinem Save-Button-ActionListener lässt du dir mal den kompletten Vector ausgeben. Und das selbe tust du in deiner Prozedur beim Beenden, auch als erste Anweisung.
...und das sind dann die selben Daten, oder nicht die selben Daten? Wenn nein, dann hast du hier 2 verschiedene Vektoren am laufen, und die ChangeListener der Checkboxen verändern nur den ersten, und zwar den auf den der Save-Button zugreift.

Wenn es doch die selben Daten sind, dann liest du sie entweder falsch aus, oder schreibst sie falsch in die Datei, oder beides (also in deiner Prozedur beim Beenden). Eines der beiden Dinge muss es ja sein... Bitte prüf das mal und sag genau was da rauskommt.
 

ghummelll

Mitglied
Na gut, hast schon recht. :)

So sieht der Save-Button aus, der alles korrekt macht.
Code:
JButton applyButton = HudWidgetFactory.createHudButton("Save changes");
applyButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		saveDataSet();
	}
});
this.hudGroundPanel.add(applyButton, gbc);

Und hier der WindowListener des HUDs:
Code:
hud.getJDialog().addWindowListener(new WindowAdapter() {
	public void windowClosing(WindowEvent e) {
		if (attHandler.areThereChanges()) {
			// System.out.println("Changes made...");
					
			final HudWindow wantToSaveHud = new HudWindow();
			
			// bla bla bla
			// Anlegen eines Panels, eines Labels 
			// und so weiter					

			JButton yesButton = HudWidgetFactory.createHudButton("Yes");
			yesButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					saveDataSet();
					hud.getJDialog().dispose();
					wantToSaveHud.getJDialog().dispose();
				}
			});

			// bla bla bla

		} else {
			System.out.println("No changes made...");
			hud.getJDialog().dispose();
		}
	}
});
 

hdi

Top Contributor
Jo, und jetzt sag mal bitte woher in zweitem Teil der "attHandler" kommt, wie er diese areThereChanges()-Methode implementiert hat, und zeig deine ChangeListener.
Die saveData() Methode wär auch sehr gut.
 

ghummelll

Mitglied
Also, als erste Anweisung in deinem Save-Button-ActionListener lässt du dir mal den kompletten Vector ausgeben. Und das selbe tust du in deiner Prozedur beim Beenden, auch als erste Anweisung.
...und das sind dann die selben Daten, oder nicht die selben Daten? Wenn nein, dann hast du hier 2 verschiedene Vektoren am laufen
Genau da liegt das Problem: Es werden nämlich nicht die identischen Daten angezeigt. Zwei unterschiedliche Vektoren sind aber auszuschließen, weil der AttributHandler diesen Vektor verwaltet. Ist zwar nicht als Singleton implementiert, aber davon könnt Ihr wirklich ausgehen.

Jo, und jetzt sag mal bitte woher in zweitem Teil der "attHandler" kommt, wie er diese areThereChanges()-Methode implementiert hat, und zeig deine ChangeListener.
Die saveData() Methode wär auch sehr gut.
Der attHandler ist eine Membervariable in meiner Klasse.

.
.
.
.
.
.
.
.

FUCK!!! In der Methode areThereChanges vergleiche ich zwei Vektoren, allerdings können die Elemente in unterschiedlicher Reihenfolge vorliegen. Deswegen geh ich den einen Vektor Element für Element durch, suche nach diesem Element im zweiten Vektor und lösche es dann aus dem Vektor. Bleiben am Ende genau 0 Elemente übrig, sind beide Vektoren gleich. Genau da liegt das Problem: Ich lösche die Elemente aus dem Vektor und dann können sie auch nicht mehr geschrieben werden. :lol::lol:

Wie schlecht!! Hm ich danke Euch für Eure Hilfe, sonst wär ich da wohl ewig nicht drauf gekommen... Ich such dann die Schuld lieber in Java. :)

Nochmals lieben Dank und einen wunderschönen Abend noch.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Datensatz auf ein bestimmten Parameter einzugrenzen Allgemeine Java-Themen 11
P [Webdriver] einen Datensatz signieren Allgemeine Java-Themen 0
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
K Wiederholungen in Datensatz erkennen?! Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
B Abfragenteil wird nicht aufgerufen Allgemeine Java-Themen 2
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
T Sicherheitshinweis - Zertifikat wird angefordert Allgemeine Java-Themen 5
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
HarleyDavidson Threads ProgressMonitor wird nicht angezeigt! Allgemeine Java-Themen 6
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
J CSV Datei wird ungewollt umformatiert Allgemeine Java-Themen 5
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Threads Log4J Logger wird "überschrieben" Allgemeine Java-Themen 3
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
J batch datei wird nicht aufgerufen Allgemeine Java-Themen 11
M Datei wird nicht vollständig geschrieben (FileOutputStream, OutputStreamWriter, Encoding) Allgemeine Java-Themen 6
P OSGi - Bundle-Methode wird nicht aufgerufen Allgemeine Java-Themen 3
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben