无法从 URL 获取输入流

Can't get input stream from URL

我正在尝试从 URL 获取 BufferedImage,但它向我抛出一个 IIOException。我已经检查了 URL,它工作正常。

异常:

javax.imageio.IIOException: Can't get input stream from URL!
javax.imageio.ImageIO.read(ImageIO.java:1395)
de.visionvenue.statify.objects.Statistics.<init>(Statistics.java:60)
de.visionvenue.statify.commands.SetupCommand.onCommand(SetupCommand.java:67)
de.visionvenue.statify.manager.CommandManager.lambda[=11=](CommandManager.java:26)
java.lang.Thread.run(Thread.java:748)

这是我尝试获取 BufferedImage 的代码

URL img = new URL(settings.getGuild().getIconUrl());
            
BufferedImage image = ImageIO.read(img);

URL是

https://cdn.discordapp.com/icons/712313516542918717/8b1e61da607cdd67546ffba653a12604.png

鉴于代码片段很少,很难找出原因,因为它对评论中的其他用户有效。


原回答:

您想改用 URLConnection class

然后您可以调用 .connect().getInputStream()


如果您需要更复杂的逻辑和更好的 API,我建议您使用最适合基于 REST 的连接的 Apache HTTPClient (for any HTTP calls) or the JAX-RS client,但也可用于任何其他 url 连接.后者的优点是存在多种实现(resteasy、jersey、CXF,仅举几例)。

您可以在URL中使用openStream()方法,如下:

String url = settings.getGuild().getIconUrl();
URL img = new URL(url);
BufferedImage image = ImageIO.read(img.openStream());