Fix IndexOutOfBoundsException in Replay Center and Viewer when disk access is very fast

This commit is contained in:
johni0702
2015-08-14 20:45:29 +02:00
parent 26d20d0f91
commit 8630675f5c
2 changed files with 9 additions and 9 deletions

View File

@@ -42,7 +42,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
private GuiAdvancedTextField searchNameInput, searchServerInput;
private GuiButton searchActionButton;
private Queue<GuiReplayListEntry> loadedReplaysQueue = new ConcurrentLinkedQueue<GuiReplayListEntry>();
private Queue<GuiListExtended.IGuiListEntry> loadedReplaysQueue = new ConcurrentLinkedQueue<GuiListExtended.IGuiListEntry>();
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();

View File

@@ -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);