From 491e837207a32932806987c2a4bdb1e28431b0f9 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 16 Mar 2020 17:37:10 -0400 Subject: [PATCH] client: synchronize some calls to ImageIO.read() ImageIO is not thread safe, see also 054dd4852dec76bf49fc13f81e6ed96790b0ddd1 --- .../runelite/client/plugins/discord/DiscordPlugin.java | 6 +++++- .../java/net/runelite/client/ui/FatalErrorDialog.java | 9 ++++----- .../main/java/net/runelite/client/ui/SplashScreen.java | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index c1537d8f40..513ce7bff7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -292,7 +292,11 @@ public class DiscordPlugin extends Plugin } final InputStream inputStream = response.body().byteStream(); - final BufferedImage image = ImageIO.read(inputStream); + final BufferedImage image; + synchronized (ImageIO.class) + { + image = ImageIO.read(inputStream); + } memberById.setAvatar(image); } finally diff --git a/runelite-client/src/main/java/net/runelite/client/ui/FatalErrorDialog.java b/runelite-client/src/main/java/net/runelite/client/ui/FatalErrorDialog.java index 8563595685..dcf1b9fe48 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/FatalErrorDialog.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/FatalErrorDialog.java @@ -33,12 +33,10 @@ import java.awt.Font; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; -import java.io.IOException; import java.net.ConnectException; import java.net.UnknownHostException; import java.security.GeneralSecurityException; import java.util.concurrent.atomic.AtomicBoolean; -import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; @@ -52,8 +50,9 @@ import javax.swing.border.EmptyBorder; import lombok.extern.slf4j.Slf4j; import net.runelite.client.RuneLite; import net.runelite.client.RuneLiteProperties; -import net.runelite.client.util.VerificationException; +import net.runelite.client.util.ImageUtil; import net.runelite.client.util.LinkBrowser; +import net.runelite.client.util.VerificationException; @Slf4j public class FatalErrorDialog extends JDialog @@ -82,7 +81,7 @@ public class FatalErrorDialog extends JDialog try { - BufferedImage logo = ImageIO.read(SplashScreen.class.getResourceAsStream("runelite_transparent.png")); + BufferedImage logo = ImageUtil.getResourceStreamFromClass(FatalErrorDialog.class, "runelite_transparent.png"); setIconImage(logo); JLabel runelite = new JLabel(); @@ -92,7 +91,7 @@ public class FatalErrorDialog extends JDialog runelite.setOpaque(true); rightColumn.add(runelite); } - catch (IOException e) + catch (RuntimeException e) { } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/SplashScreen.java b/runelite-client/src/main/java/net/runelite/client/ui/SplashScreen.java index 59f0b13610..77cac7340b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/SplashScreen.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/SplashScreen.java @@ -33,7 +33,6 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import javax.annotation.Nullable; -import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; @@ -46,6 +45,7 @@ import javax.swing.border.EmptyBorder; import javax.swing.plaf.basic.BasicProgressBarUI; import lombok.extern.slf4j.Slf4j; import net.runelite.client.ui.skin.SubstanceRuneLiteLookAndFeel; +import net.runelite.client.util.ImageUtil; import org.pushingpixels.substance.internal.SubstanceSynapse; @Slf4j @@ -68,7 +68,7 @@ public class SplashScreen extends JFrame implements ActionListener private SplashScreen() throws IOException { - BufferedImage logo = ImageIO.read(SplashScreen.class.getResourceAsStream("runelite_transparent.png")); + BufferedImage logo = ImageUtil.getResourceStreamFromClass(SplashScreen.class, "runelite_transparent.png"); setTitle("RuneLite Launcher");