From 8630675f5c576220d626061db3de46cfb77a6446 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Fri, 14 Aug 2015 20:45:29 +0200 Subject: [PATCH] Fix IndexOutOfBoundsException in Replay Center and Viewer when disk access is very fast --- .../replaymod/gui/online/GuiReplayCenter.java | 16 ++++++++-------- .../gui/replayviewer/GuiReplayViewer.java | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java index d3674af1..5fcf55fd 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java @@ -42,7 +42,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { private GuiAdvancedTextField searchNameInput, searchServerInput; private GuiButton searchActionButton; - private Queue loadedReplaysQueue = new ConcurrentLinkedQueue(); + private Queue loadedReplaysQueue = new ConcurrentLinkedQueue(); private boolean showSearchFields = false; @@ -453,7 +453,12 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { searchServerInput.updateCursorCounter(); } while (!loadedReplaysQueue.isEmpty()) { - currentList.addEntry(currentList.getEntries().size() - 1, loadedReplaysQueue.poll()); + GuiListExtended.IGuiListEntry entry = loadedReplaysQueue.poll(); + if (entry instanceof GuiLoadingListEntry) { + currentList.removeEntry(entry); + } else { + currentList.addEntry(currentList.getEntries().size() - 1, entry); + } } } @@ -525,12 +530,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { } } - mc.addScheduledTask(new Runnable() { - @Override - public void run() { - currentList.removeEntry(loadingListEntry); - } - }); + loadedReplaysQueue.add(loadingListEntry); } }, "replaymod-list-loader"); currentListLoader.start(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java b/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java index cea3abbb..3054cc0f 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java @@ -100,7 +100,7 @@ public class GuiReplayViewer extends GuiScreen implements GuiYesNoCallback { } } - mc.addScheduledTask(new Runnable() { + loadedReplaysQueue.offer(new Runnable() { @Override public void run() { replayGuiList.removeEntry(loadingListEntry);