Comparison method violates its general contract!
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.base/java.util.TimSort.mergeLo(Unknown Source)
at java.base/java.util.TimSort.mergeAt(Unknown Source)
at java.base/java.util.TimSort.mergeCollapse(Unknown Source)
at java.base/java.util.TimSort.sort(Unknown Source)
at java.base/java.util.Arrays.sort(Unknown Source)
at org.eclipse.jface.viewers.ViewerComparator.sort(ViewerComparator.java:206)
at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:1037)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:670)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:618)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:610)
at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:572)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1400)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1361)
at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:572)
at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282)
at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1634)
at name.abuchen.portfolio.ui.views.SecuritiesTable.setInput(SecuritiesTable.java:799)
at name.abuchen.portfolio.ui.views.SecurityListView.setSecurityTableInput(SecurityListView.java:513)
at name.abuchen.portfolio.ui.views.SecurityListView.createBody(SecurityListView.java:503)
at name.abuchen.portfolio.ui.editor.AbstractFinanceView.createViewControl(AbstractFinanceView.java:159)
at name.abuchen.portfolio.ui.editor.PortfolioPart.createView(PortfolioPart.java:554)
at name.abuchen.portfolio.ui.editor.PortfolioPart.activateView(PortfolioPart.java:510)
at name.abuchen.portfolio.ui.editor.PortfolioPart.activateView(PortfolioPart.java:498)
at name.abuchen.portfolio.ui.editor.ClientEditorSidebar$1.select(ClientEditorSidebar.java:70)
at name.abuchen.portfolio.ui.editor.ClientEditorSidebar$1.select(ClientEditorSidebar.java:1)
at name.abuchen.portfolio.ui.editor.Sidebar$Entry.handleMouseDown(Sidebar.java:419)
at org.eclipse.swt.events.MouseListener$2.mouseDown(MouseListener.java:96)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4209)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1037)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4026)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3626)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:166)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1461)
Vielen Dank für deine Hilfe. Die Limits sind entweder leer oder bis zu 4 stellig. Ich habe die Limits in einem Excel-Export betrachtet und dort nichts ungewöhnliches (wie Leerzeichen o.ä.) gefunden. Ich habe die 4-stelligen gelöscht, um zu sehen ob die Darstellung mit Tausender-Punkt ein Problem sein könnte - keine Änderung. Ich glaube nicht, dass die Limit-Werte an sich das Problem sind, sondern eher die Sortierung über die Limit Spalte.
Unten ist die aktuelle Settings-Datei. Weißt du, wie ich in der Datei die Sortierung der Allewertpapiere-Ansicht ändern kann, so dass diese ncht mehr nach Limit sondern z.B. nach Namen sortiert?
Vielleicht ist es die Zeile, aber das ist geraten:
Die Fehlermeldung bedeutet, daß der Vergleich von Limits inkonsistent ist, also z.B. manchmal A<B sagt und manchmal A>B. Ich sehe im Code erst einmal nicht, wie das passieren könnte. Von daher wäre es gut, ein Minimalbeispiel als Datei zu haben.
Ich habe die Datei aus dem Backup wiederhergestellt und noch ein paar Tests gemacht.
Das Problem tritt immer dann auf, wenn ich die Sortierung bei AlleWertpapiere auf Limit-Sortierung setze.
Internal Error
Ursache: java.lang.IllegalArgumentException: Comparison method violates its general contract!
Details: : Comparison method violates its general contract!
Wenn ich direkt danach die Sortierung ändere und in AlleWertpapiere bleibe ist der Fehler weg. Sobald ich (mit Limit-Sortierung) auf eine andere Ansicht geklickt habe und dann wieder auf AlleWertpapiere habe ich dauerhaft den hier beschriebenen Fehler.
Es sind aktuell 547 Wertpapiere in der Ansicht.
Ich habe außerdem festgestellt, dass der Fehler teilweise nicht auftritt nicht auftritt, wenn AlleWertpapiere gefiltert wird.
Filter “st”: OK
Filter “s”: Fehler, falls Limit absteigend sortiert ist (leere unten). Der Fehler tritt in beiden Szenarien auf:
wenn das t aus dem st Filter gelöscht wird (während Limit absteigend sortiert ist)
wenn Filter=s und die Limit-Sortierung von aufsteigend nach absteigend umgestellt wird (Filter=s und Sortierung aufsteigend zeigt keinen Fehler)
Bei Filter “m” bekomme ich einen Fehler bei beiden Sortierungen.
Bei Filter “m” und Filter “Nur aktive Instrumente” bekomme ich keinen Fehler( 243 Wertpapiere angezeigt), auch nicht wenn ich zusätzlich “Bestand = 0” aktiviere (36 Wertpapiere angezeigt).
ABER Filter “m” und Filter “Nur aktive Instrumente” UND “Bestand > 0” liefert einen Fehler (obwohl nur 207 Wertpapiere angezeigt werden). Eigentlich sollte es doch kein Wertpapier nur in der letzten Auswahl vorhanden sein.
Wenn im Filter/Suche nichts/kein “m” eingegeben wird und “Nur aktive Instrumente” über die gesamte Liste gefiltert wird, erhalte ich auch die Fehlermeldung.
Ich habe die Wertpapierliste mit den Limits angehängt. Ich habe aber nichts Auffälliges gesehen.
Was genau wird denn hier verglichen? Welche Duplikate wären ggf. relevant? z.B. die ISIN GB0030932676 kommt 2 mal vor, liefert aber keinen Fehler wenn ich danach filtere und Limit sortiere.
Die einzigen Fehler im Fehlerprotokoll sind neben einigen Kursdaten APIs einige Papiere mit negativem Bestand - kann das einen Einfluss haben?:
Sat Sep 11 09:05:39 CEST 2021
Negativer Bestand während der FIFO Kostenberechnung. Bestand: -0,005 Wertpapier: Lyxor MSCI Em.M.2x D.L.TRN U.ETF Datum: 02.01.2018
Noch eine Ergänzung:
Bei den Berichten, also Vermögensaufstellung und Performance-Wertpapiere funktioniert die Sortierung nach der Limit-spalte einwandfrei.