Ich nutze folgenden Code um eine ObservableList zu füllen. Diese wird dann im Tabview angezeigt.
Wenn ich die Liste aktualisieren möchte, also die Methode ein zweites Mal verwende bekomme ich eine Exception.
Der Code läuft weiter, die Anzeige ist OK, aber warum gibt es die Exception ?
Wenn ich debugger ist die Ursache nicht der Code sondern irgendwas dahinter.
Ich habe schon gegoogelt, aber die Erklärungen versteh ich nicht, scheint so als ob die die Ursache im Binding sehen, aber habe doch die Liste nicht direkt gebunden.
Hat jemand eine Idee wo ich die Ursache suchen muss ?
Also das ist der Code zum füllen meiner Liste:
Das ist die Exception
und das scheint die Methode zu sein die diese auslöst, dabei bin aber nicht ganz sicher.
in der Klasse expression helper
Wenn ich die Liste aktualisieren möchte, also die Methode ein zweites Mal verwende bekomme ich eine Exception.
Der Code läuft weiter, die Anzeige ist OK, aber warum gibt es die Exception ?
Wenn ich debugger ist die Ursache nicht der Code sondern irgendwas dahinter.
Ich habe schon gegoogelt, aber die Erklärungen versteh ich nicht, scheint so als ob die die Ursache im Binding sehen, aber habe doch die Liste nicht direkt gebunden.
Hat jemand eine Idee wo ich die Ursache suchen muss ?
Also das ist der Code zum füllen meiner Liste:
Code:
private void filltvmainlanguages (){
try {
MaintenanceClass maintenanceclass = new MaintenanceClass();
ctvMainLanguagesOLst.clear();
// Get languagelist from database
ctvmainLanguagesArray = maintenanceclass.getlanguages();
for (int i=0 ; i<ctvmainLanguagesArray .length; i++) {
ctvMainLanguagesOLst.add(new tvcMainLanguages(ctvmainLanguagesArray[i][0], ctvmainLanguagesArray[i][1]));
}
ctvMainLanguagesOLst.add(new tvcMainLanguages("0", "new language here"));
tvmainlanguages.setItems(null);
tvmainlanguages.setItems(ctvMainLanguagesOLst);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException | IOException | JSONException ex) {
System.err.println("Maintenance Controller Constructor : " + ex);
}
}
Das ist die Exception
Code:
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException
at com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.subList(ReadOnlyUnbackedObservableList.java:136)
at javafx.collections.ListChangeListener$Change.getAddedSubList(ListChangeListener.java:242)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.handleSelectedCellsListChangeEvent(TableView.java:3004)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.clearAndSelect(TableView.java:2423)
at javafx.scene.control.TableView$TableViewSelectionModel.clearAndSelect(TableView.java:1914)
at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.simpleSelect(TableCellBehaviorBase.java:215)
at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.doSelect(TableCellBehaviorBase.java:148)
at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:150)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:95)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
und das scheint die Methode zu sein die diese auslöst, dabei bin aber nicht ganz sicher.
in der Klasse expression helper
Code:
@Override
protected void fireValueChangedEvent() {
final T oldValue = currentValue;
currentValue = observable.getValue();
final boolean changed = (currentValue == null)? (oldValue != null) : !currentValue.equals(oldValue);
if (changed) {
try {
listener.changed(observable, oldValue, currentValue);
} catch (Exception e) {
Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
}
}
}