ge plugin: fix accessing item composition from executor thread

This commit is contained in:
Adam
2018-08-04 17:03:55 -04:00
parent b72bda1c75
commit 19cf1fd344
2 changed files with 17 additions and 9 deletions

View File

@@ -34,6 +34,7 @@ import javax.swing.border.EmptyBorder;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.PluginPanel;
@@ -56,7 +57,7 @@ class GrandExchangePanel extends PluginPanel
private GrandExchangeOffersPanel offersPanel;
@Inject
GrandExchangePanel(Client client, ItemManager itemManager, ScheduledExecutorService executor)
GrandExchangePanel(Client client, ClientThread clientThread, ItemManager itemManager, ScheduledExecutorService executor)
{
super(false);
@@ -64,7 +65,7 @@ class GrandExchangePanel extends PluginPanel
setBackground(ColorScheme.DARK_GRAY_COLOR);
// Search Panel
searchPanel = new GrandExchangeSearchPanel(client, itemManager, executor);
searchPanel = new GrandExchangeSearchPanel(clientThread, itemManager, executor);
//Offers Panel
offersPanel = new GrandExchangeOffersPanel(client, itemManager, executor);

View File

@@ -40,14 +40,15 @@ import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.ItemComposition;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.components.IconTextField;
import net.runelite.client.ui.components.PluginErrorPanel;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.RunnableExceptionLogger;
import net.runelite.http.api.item.Item;
import net.runelite.http.api.item.ItemPrice;
import net.runelite.http.api.item.SearchResult;
@@ -69,7 +70,7 @@ class GrandExchangeSearchPanel extends JPanel
private final GridBagConstraints constraints = new GridBagConstraints();
private final CardLayout cardLayout = new CardLayout();
private final Client client;
private final ClientThread clientThread;
private final ItemManager itemManager;
private final ScheduledExecutorService executor;
@@ -99,9 +100,9 @@ class GrandExchangeSearchPanel extends JPanel
ERROR_ICON = new ImageIcon(ImageUtil.getResourceStreamFromClass(IconTextField.class, "error.png"));
}
GrandExchangeSearchPanel(Client client, ItemManager itemManager, ScheduledExecutorService executor)
GrandExchangeSearchPanel(ClientThread clientThread, ItemManager itemManager, ScheduledExecutorService executor)
{
this.client = client;
this.clientThread = clientThread;
this.itemManager = itemManager;
this.executor = executor;
init();
@@ -120,7 +121,7 @@ class GrandExchangeSearchPanel extends JPanel
searchBox.setBackground(ColorScheme.MEDIUM_GRAY_COLOR);
searchBox.setHoverBackgroundColor(ColorScheme.MEDIUM_GRAY_COLOR.brighter());
searchBox.setIcon(SEARCH_ICON);
searchBox.addActionListener(e -> executor.execute(() -> priceLookup(false)));
searchBox.addActionListener(e -> executor.execute(RunnableExceptionLogger.wrap(() -> priceLookup(false))));
searchItemsPanel.setLayout(new GridBagLayout());
searchItemsPanel.setBackground(ColorScheme.DARK_GRAY_COLOR);
@@ -163,7 +164,7 @@ class GrandExchangeSearchPanel extends JPanel
void priceLookup(String item)
{
searchBox.setText(item);
executor.execute(() -> priceLookup(true));
executor.execute(RunnableExceptionLogger.wrap(() -> priceLookup(true)));
}
private void priceLookup(boolean exactMatch)
@@ -199,6 +200,12 @@ class GrandExchangeSearchPanel extends JPanel
return;
}
// move to client thread to lookup item composition
clientThread.invokeLater(() -> processResult(result, lookup, exactMatch));
}
private void processResult(SearchResult result, String lookup, boolean exactMatch)
{
itemsList.clear();
if (result != null && !result.getItems().isEmpty())
@@ -209,7 +216,7 @@ class GrandExchangeSearchPanel extends JPanel
{
int itemId = item.getId();
ItemComposition itemComp = client.getItemDefinition(itemId);
ItemComposition itemComp = itemManager.getItemComposition(itemId);
if (itemComp == null)
{
continue;