Я пытаюсь получить BufferedImage из URL-адреса, но он выдает исключение 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$0(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
Я также пробовал это в пустом проекте. Это сработало. Для получения дополнительной информации см. комментарии в первом ответе.
Когда это сработало, значит, ваша проблема где-то в settings.getGuild().getIconUrl().
Это проблема с запросом URL. Я использую JDA и думаю, что боты Discord могут получить только необработанный URL-адрес, но не файл/изображение из него. Как я мог «эмулировать», что приложение не является ботом Discord.




Учитывая несколько фрагментов кода, трудно понять причину, поскольку это работает для других пользователей, как видно из комментариев.
Оригинальный ответ:
Вместо этого вы хотите использовать класс URLConnection.
Затем вы можете вызвать .connect() и .getInputStream().
Если вам нужна более сложная логика и лучшие API, я бы рекомендовал использовать либо Apache HTTPClient (для любых HTTP-вызовов), либо клиент JAX-RS, который лучше всего подходит для соединений на основе REST, но также может быть используется для любого другого соединения URL. Преимущество последнего заключается в том, что существует несколько реализаций (resteasy, jersey, CXF и многие другие).
Я получаю сообщение об ошибке 403, если пытаюсь использовать URLConnection.
Я попытался использовать Apache HTTPClient, и это сработало. Спасибо за рекомендацию!
Вы можете использовать метод openStream() в URL следующим образом:
String url = settings.getGuild().getIconUrl();
URL img = new URL(url);
BufferedImage image = ImageIO.read(img.openStream());
Не работает. Я получаю ошибку 403
Здесь работает нормально.
URL img = new URL("https://cdn.discordapp.com/icons/712313516542918717/8b1e61da607cdd67546ffba653a12604.png"); BufferedImage image = ImageIO.read(img);. Не могли бы вы попробовать запустить приведенный выше код в юнит-тесте и посмотреть, нормально ли он работает?