mabe02 / lanterna

Java library for creating text-based GUIs
GNU Lesser General Public License v3.0
2.24k stars 243 forks source link

Table viewTopRow should never be greater than number of rows #461

Closed keithkml closed 4 years ago

keithkml commented 4 years ago

Currently, when viewTopRow is greater than the index of the last row, rendering crashes. I suggest either dynamically computing viewTopRow, returning the index of the last row if viewTopRow is higher.

java.lang.IndexOutOfBoundsException: Index -2 out of bounds for length 1
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:372)
    at java.base/java.util.ArrayList.get(ArrayList.java:458)
    at com.googlecode.lanterna.gui2.table.DefaultTableRenderer.calculateVisibleRows(DefaultTableRenderer.java:436)
    at com.googlecode.lanterna.gui2.table.DefaultTableRenderer.drawComponent(DefaultTableRenderer.java:380)
    at ...my code...
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.drawComponent(AbstractBasePane.java:449)
    at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.drawComponent(AbstractBasePane.java:426)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.AbstractBasePane.draw(AbstractBasePane.java:81)
    at com.googlecode.lanterna.gui2.AbstractWindow.draw(AbstractWindow.java:130)
    at com.googlecode.lanterna.gui2.MultiWindowTextGUI.drawGUI(MultiWindowTextGUI.java:262)
    at com.googlecode.lanterna.gui2.AbstractTextGUI.updateScreen(AbstractTextGUI.java:120)
    at com.googlecode.lanterna.gui2.MultiWindowTextGUI.updateScreen(MultiWindowTextGUI.java:223)
    at com.googlecode.lanterna.gui2.AbstractTextGUIThread.processEventsAndUpdate(AbstractTextGUIThread.java:85)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread.mainGUILoop(SeparateTextGUIThread.java:114)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread.access$000(SeparateTextGUIThread.java:44)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread$1.run(SeparateTextGUIThread.java:55)

Also:

SeparateTextGUIThreadjava.lang.IndexOutOfBoundsException: Index -2 out of bounds for length 1
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:372)
    at java.base/java.util.ArrayList.get(ArrayList.java:458)
    at com.googlecode.lanterna.gui2.table.DefaultTableRenderer.getPreferredSize(DefaultTableRenderer.java:298)
    at com.googlecode.lanterna.gui2.table.DefaultTableRenderer.drawComponent(DefaultTableRenderer.java:355)
...my code...
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:264)
    at com.googlecode.lanterna.gui2.Panel$DefaultPanelRenderer.drawComponent(Panel.java:223)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.drawComponent(AbstractBasePane.java:449)
    at com.googlecode.lanterna.gui2.AbstractBasePane$ContentHolder$1.drawComponent(AbstractBasePane.java:426)
    at com.googlecode.lanterna.gui2.AbstractComponent.draw(AbstractComponent.java:218)
    at com.googlecode.lanterna.gui2.AbstractBasePane.draw(AbstractBasePane.java:81)
    at com.googlecode.lanterna.gui2.AbstractWindow.draw(AbstractWindow.java:130)
    at com.googlecode.lanterna.gui2.MultiWindowTextGUI.drawGUI(MultiWindowTextGUI.java:262)
    at com.googlecode.lanterna.gui2.AbstractTextGUI.updateScreen(AbstractTextGUI.java:120)
    at com.googlecode.lanterna.gui2.MultiWindowTextGUI.updateScreen(MultiWindowTextGUI.java:223)
    at com.googlecode.lanterna.gui2.AbstractTextGUIThread.processEventsAndUpdate(AbstractTextGUIThread.java:85)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread.mainGUILoop(SeparateTextGUIThread.java:114)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread.access$000(SeparateTextGUIThread.java:44)
    at com.googlecode.lanterna.gui2.SeparateTextGUIThread$1.run(SeparateTextGUIThread.java:55)
mabe02 commented 4 years ago

I've updated it to recalculate viewTopRow if it's larger than the total rows in the table