JabRef / jabref

Graphical Java application for managing BibTeX and biblatex (.bib) databases
https://devdocs.jabref.org
MIT License
3.49k stars 2.46k forks source link

index out of bounds - related to table sort order and biblatex source tab #10403

Open ThiloteE opened 10 months ago

ThiloteE commented 10 months ago

JabRef version

5.10 (latest release)

Operating system

Windows

Details on version and operating system

JabRef 100.0.0 Windows 10 10.0 amd64 Java 20.0.1 JavaFX 20.0.2+3

Checked with the latest development build (copy version output from About dialog)

Steps to reproduce the behaviour

  1. Have following library: librarytoreproduce.zip
  2. Sort maintable so that the arrow at author looks upwards: image
  3. Copy'n paste author = {blab}, into the first two entries in the entry table by editing the biblatex source tab.

What happens:

Index out of bounds error.

Appendix

Log File ``` java.lang.IndexOutOfBoundsException: [ fromIndex: 0, toIndex: 2, size: 1 ] at javafx.controls@20.0.2/com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.subList(ReadOnlyUnbackedObservableList.java:162) at javafx.base@20.0.2/javafx.collections.ListChangeListener$Change.getAddedSubList(ListChangeListener.java:243) at javafx.controls@20.0.2/com.sun.javafx.scene.control.SelectedItemsReadOnlyObservableList.getAddedElements(SelectedItemsReadOnlyObservableList.java:133) at javafx.controls@20.0.2/com.sun.javafx.scene.control.SelectedItemsReadOnlyObservableList.lambda$new$0(SelectedItemsReadOnlyObservableList.java:55) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:327) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.controls@20.0.2/com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList._endChange(ReadOnlyUnbackedObservableList.java:55) at javafx.controls@20.0.2/javafx.scene.control.MultipleSelectionModelBase$SelectedIndicesList._endChange(MultipleSelectionModelBase.java:917) at javafx.controls@20.0.2/javafx.scene.control.ControlUtils.updateSelectedIndices(ControlUtils.java:218) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.fireCustomSelectedCellsListChangeEvent(TableView.java:3186) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.lambda$new$1(TableView.java:2272) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.base@20.0.2/javafx.collections.transformation.SortedList.sourceChanged(SortedList.java:111) at javafx.base@20.0.2/javafx.collections.transformation.TransformationList.lambda$getListener$0(TransformationList.java:105) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.base@20.0.2/javafx.collections.ModifiableObservableListBase.setAll(ModifiableObservableListBase.java:98) at javafx.controls@20.0.2/com.sun.javafx.scene.control.SelectedCellsMap.setAll(SelectedCellsMap.java:173) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.updateSelection(TableView.java:2491) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.lambda$new$3(TableView.java:2373) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:327) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:524) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.base@20.0.2/javafx.collections.transformation.SortedList.sourceChanged(SortedList.java:111) at javafx.base@20.0.2/javafx.collections.transformation.TransformationList.lambda$getListener$0(TransformationList.java:105) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:327) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:485) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.base@20.0.2/javafx.collections.transformation.FilteredList.sourceChanged(FilteredList.java:147) at javafx.base@20.0.2/javafx.collections.transformation.TransformationList.lambda$getListener$0(TransformationList.java:105) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:485) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at com.tobiasdiez.easybind@2.2.1-SNAPSHOT/com.tobiasdiez.easybind.MappedBackedList.sourceChanged(MappedBackedList.java:69) at javafx.base@20.0.2/javafx.collections.transformation.TransformationList.lambda$getListener$0(TransformationList.java:105) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at org.jabref@100.0.0/org.jabref.gui.util.UiThreadList.sourceChanged(UiThreadList.java:23) at javafx.base@20.0.2/javafx.collections.transformation.TransformationList.lambda$getListener$0(TransformationList.java:105) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.FXCollections$UnmodifiableObservableListImpl.lambda$new$0(FXCollections.java:958) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:327) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.FXCollections$SynchronizedObservableList.lambda$new$0(FXCollections.java:1212) at javafx.base@20.0.2/javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:485) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.base@20.0.2/com.sun.javafx.collections.ObservableListWrapper.access$200(ObservableListWrapper.java:44) at javafx.base@20.0.2/com.sun.javafx.collections.ObservableListWrapper$1$1.invalidated(ObservableListWrapper.java:74) at javafx.base@20.0.2/com.sun.javafx.collections.MapListenerHelper$Generic.fireValueChangedEvent(MapListenerHelper.java:318) at javafx.base@20.0.2/com.sun.javafx.collections.MapListenerHelper.fireValueChangedEvent(MapListenerHelper.java:70) at javafx.base@20.0.2/com.sun.javafx.collections.ObservableMapWrapper.callObservers(ObservableMapWrapper.java:115) at javafx.base@20.0.2/com.sun.javafx.collections.ObservableMapWrapper.put(ObservableMapWrapper.java:173) at org.jabref@100.0.0/org.jabref.model.entry.BibEntry.setField(BibEntry.java:601) at org.jabref@100.0.0/org.jabref.model.entry.BibEntry.setField(BibEntry.java:619) at org.jabref@100.0.0/org.jabref.gui.entryeditor.SourceTab.storeSource(SourceTab.java:322) at org.jabref@100.0.0/org.jabref.gui.entryeditor.SourceTab.bindToEntry(SourceTab.java:253) at org.jabref@100.0.0/org.jabref.gui.entryeditor.EntryEditorTab.notifyAboutFocus(EntryEditorTab.java:42) at org.jabref@100.0.0/org.jabref.gui.entryeditor.EntryEditor.setEntry(EntryEditor.java:365) at org.jabref@100.0.0/org.jabref.gui.LibraryTab.lambda$createMainTable$9(LibraryTab.java:528) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:162) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.controls@20.0.2/com.sun.javafx.scene.control.SelectedItemsReadOnlyObservableList.lambda$new$0(SelectedItemsReadOnlyObservableList.java:91) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:327) at javafx.base@20.0.2/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:71) at javafx.base@20.0.2/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:238) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482) at javafx.base@20.0.2/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541) at javafx.base@20.0.2/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:210) at javafx.controls@20.0.2/com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList._endChange(ReadOnlyUnbackedObservableList.java:55) at javafx.controls@20.0.2/javafx.scene.control.MultipleSelectionModelBase$SelectedIndicesList._endChange(MultipleSelectionModelBase.java:917) at javafx.controls@20.0.2/javafx.scene.control.ControlUtils.updateSelectedIndices(ControlUtils.java:218) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.fireCustomSelectedCellsListChangeEvent(TableView.java:3186) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewArrayListSelectionModel.clearAndSelect(TableView.java:2640) at javafx.controls@20.0.2/javafx.scene.control.TableView$TableViewSelectionModel.clearAndSelect(TableView.java:2126) at javafx.controls@20.0.2/com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.simpleSelect(TableCellBehaviorBase.java:222) at javafx.controls@20.0.2/com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.doSelect(TableCellBehaviorBase.java:198) at javafx.controls@20.0.2/com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:176) at javafx.controls@20.0.2/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) at javafx.base@20.0.2/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247) at javafx.base@20.0.2/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at javafx.base@20.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232) at javafx.base@20.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189) at javafx.base@20.0.2/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base@20.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base@20.0.2/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at javafx.base@20.0.2/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.base@20.0.2/javafx.event.Event.fireEvent(Event.java:198) at javafx.graphics@20.0.2/javafx.scene.Scene$MouseHandler.process(Scene.java:3980) at javafx.graphics@20.0.2/javafx.scene.Scene.processMouseEvent(Scene.java:1890) at javafx.graphics@20.0.2/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2704) at javafx.graphics@20.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411) at javafx.graphics@20.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at javafx.graphics@20.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450) at javafx.graphics@20.0.2/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424) at javafx.graphics@20.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449) at javafx.graphics@20.0.2/com.sun.glass.ui.View.handleMouseEvent(View.java:551) at javafx.graphics@20.0.2/com.sun.glass.ui.View.notifyMouse(View.java:937) at javafx.graphics@20.0.2/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics@20.0.2/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185) at java.base/java.lang.Thread.run(Thread.java:1623) ```
ThiloteE commented 10 months ago

Probably related to #8719, but since the steps to reproduce this are different, I created a new issue.

Siedlerchr commented 10 months ago

It's the same underlying issue. @koppor and I investigated this as part of #10399

koppor commented 10 months ago

Fixing takes time. Next week the earlierst.

HoussemNasri commented 4 months ago

Is this a Windows-specific issue? Because I can't reproduce it in the latest dev version under Linux.

ThiloteE commented 4 months ago

Really? Ok, I will test in the comming days weeks/months.

rhit-ryu1 commented 2 months ago

Is this a Windows-specific issue? Because I can't reproduce it in the latest dev version under Linux.

I've just tested this on Windows, and it seems to be still happening.

HoussemNasri commented 2 months ago

Temporary workaround: when you edit BibTeX source, always hit ctrl + s before selecting another entry.