Exception verweist nicht auf mein Programm

Status
Nicht offen für weitere Antworten.

Felix

Bekanntes Mitglied
Hallo zusammen,

ich hab ein komisches Problem: Ich habe eine JTable und möchte die selektierte Zeile beim Drücken der Entfernentaste löschen. Dazu hab ich den folgenden KeyListener geschrieben:

Code:
	public void keyReleased(KeyEvent ke) {
		if (ke.getKeyCode() == KeyEvent.VK_DELETE) { // Key festlegen
			if (ke.getSource() == table) { // Source festlegen
				int row;
				if ((row = table.getSelectedRow()) != -1) {
					if (JOptionPane.showConfirmDialog(this,
							"Wollen Sie die Vokabel wirklich löschen?",
							"löschen?", JOptionPane.YES_NO_OPTION,
							JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {

						box.getAndRemoveVocable(row);

						this.avoidstuckoverflow = true;
						
						model.removeRow(row);
					}
				}
			}
		}
	}

Wenn ich jetzt aber die letzte (das passiert nur bei der letzten) Zeile versuche so zu löschen, kommt eine Fehlermeldung, die zwar lang ist, aber nicht auf mein Programm verweist. (In dem Fall hatte die Tabelle 4 Zeilen)

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
at java.util.Vector.elementAt(Vector.java:447)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:665)
at javax.swing.JTable.setValueAt(JTable.java:2686)
at javax.swing.JTable.editingStopped(JTable.java:4668)
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:142)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:346)
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:231)
at javax.swing.JTable$GenericEditor.stopCellEditing(JTable.java:5422)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1013)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
at java.awt.Component.processMouseEvent(Component.java:6098)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
at java.awt.Component.processEvent(Component.java:5866)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4288)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4122)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4288)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Ich bin jetzt ein bisschen hilflos, weil ich nicht weiß, wo in meinem Programm der Fehler liegt. Könnt ihr mir helfen?

Gruß
der Felix
 

Wildcard

Top Contributor
Ich würde sagen, du kommst dir mit dem CellEditor in die Quere. Mach (zum Testen) mal ein SwingUtillties.invokeLater um den Code.
Aus Interesse: this.avoidstuckoverflow = true;
WTF is that?
 

Felix

Bekanntes Mitglied
Das Problem ist, dass ich das DefaultTableModel auch zu einem TableModelListener hinzugefügt habe. Da habe ich jetzt schon das Problem, dass ich, wenn ich in diesem TableModelListener etwas in die Tabelle geschrieben habe, einen StuckOverflow ausgelöst habe. Wenn ich avoidstuckoverflow = true setzte, verarbeitet der TableModelListener das nächste Ereignis nicht und damit gibt es keinen StuckOverflow.
Scheint aber, das jetzt mit dem KeyListener öfter als einmal der TableModelListener aufgerufen wird. Kann das Problem hierher kommen?
 

Marco13

Top Contributor
Hab jetzt den konkreten Codeschnipsel nicht nachvollzogen, aber sooo abenteuerlich ist sowas garnicht: Wenn man im klassischen Model-View-Controller-Pattern sowas hat wie
Code:
model.wasChangedAntThrowsEventToUpdateTheView();
und
Code:
class View
{
    void catchEventFromModel() 
    { 
        slider.setValue(model.getValue());  // slider.setValue bewirkt aber wieder ein update des Modells!
    } 
}

hat man schnell einen StackOverflow, den man umgeht, indem man sowas macht wie
Code:
class View
{
    private boolean updating = false;

    void catchEventFromModel() 
    { 
        if (!updating)
        {
            updating = true;
            slider.setValue(model.getValue());  // slider.setValue bewirkt aber wieder ein update des Modells!
            updating = false;
        }
    }
}

(Bei Swing-Component wird das i.a. verhindert, indem NUR dann ein Event geworfen wird, wenn sich wirlich was geändert hat). Allerdings weiß ich nicht, ob das hier auch vorliegt, oder das hier nur ein Hack ist :wink:
 

Wildcard

Top Contributor
Marco13, dein Beispiel verstehe ich nicht.
'View' ist eigentlich ein Controller, oder?
Und slider ist eine View?
Aber warum triggert der slider dann ein Event auf dem Modell?
Und wenn slider selbst wieder mit dem Modell verbunden ist, warum muss er dann benachrichtigt werden?
 

Marco13

Top Contributor
Vielleicht hätte ich mehr Zeit für dieses Beispiel aufwenden sollen. Der Controller kann dabei (analog zu den ganze Swing-Klassen) unter den Tisch fallen.

Nochmal abstrakter:

Wenn das Modell geändert wird, dann soll dieser neue Zustand in der View angezeigt werden
(Dazu hängt ein Listener am Modell, der dafür sorgt, dass die GUI sich den neuen Wert holt - dieser Listener kann direkt die GUI sein, oder ein Controller. In diesem Beispiel würde das z.B. bedeuten, dass der Wert eines Sliders verändert wird, so das er den Wert im Modell widerspiegelt)

Wenn in der View etwas geändert wird, wird diese Änderung ins Modell übertragen.
(Dazu hängt ein Listener z.B. an einem Slider, der bei jeder Änderung des Slider-Wertes den neuen Wert ins Modell überträgt)

Wenn man nicht sicherstellt, dass
1. Das Modell nur dann Events feuert, wenn der Wert wirklich geändert (und nicht etwa nur "neu gesetzt") wurde, ODER
2. Die View den Wert des Sliders nur dann setzt, wenn der Event, den sie vom Modell bekommt, NICHT dadurch ausgelöst wurde, dass sie SELBST diesen Wert ans Modell übetragen hat
hat man unendliche gegenseitige Aufrufe.
 

Wildcard

Top Contributor
Nach meinem Verständnis sieht MVC in etwa so aus:
1.Fall
Model ändert sich -> View wird informiert -> View holt die neuen Daten ab und passt die Darstellung an

2.Fall
Benutzer interagiert mit View -> View benachrichtigt Controller -> Controller verändert Model -> Model ändert sich -> zurück zu Fall 1
 

Marco13

Top Contributor
Ja, aber die View kann ja nicht unterscheiden, ob z.B. das Verändern des Wertes eines Sliders eine "Anpassung der Darstellung ans Modell" war, oder ob das vom Benutzer gemacht wurde (und das Modell demnach "an die Darstellung angepasst werden muss"). Vom Slider kommt nur ein Event. Man sieht daran nicht, ob der neue Sliderwert ins Modell übertragen werden muss, oder ob er (über welchen Weg auch immer) gerade erst aus dem Modell kommt....

An deinem Beispiel:

1.Fall
Model ändert sich -> View wird informiert -> View holt die neuen Daten ab und passt die Darstellung an

2.Fall
Benutzer interagiert mit View -> View benachrichtigt Controller -> Controller verändert Model -> Model ändert sich -> zurück zu Fall 1

Die beiden fettgedruckten Dinge bewirken, dass (zum Beispiel) der Slider einen Event wirft, d.h. dort wird "View benachrichtigt Controller" ausgeführt.

Wenn das irgendwo vom Controller verhindert werden soll, muss DER sich merken, was er gerade macht ... und dann braucht eben der Controller so ein Flag....
 

Wildcard

Top Contributor
Ok, ich glaube ich verstehe dein Beispiel jetzt.
Für mich ist hier die View Komponente ein reiner Renderer, der nur Daten nimmt und visualisiert, also nicht direkt an zB slider.setValue(newValue) gekoppelt ist.
Ich bin wohl schon zu lange in der Welt von SWT/JFace/Draw2D/GEF um bei euch Swingern noch mitreden zu können. :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
F Java exception bei der Ausführung Java Basics - Anfänger-Themen 10

Ähnliche Java Themen


Oben