Недавно я разработал персональное программное обеспечение, чтобы помочь мне с моим ежедневным графиком. Я пытался использовать заставку Гомера Симпсона в качестве заставки при запуске, но, к сожалению, GIF не воспроизводится.

Вот весь код

public class Homer extends Application
{
    public static final String SPLASH_GIF =
            "https://media.giphy.com/media/JRQ1PegFVKXBu/giphy.gif";
    private static final int SPLASH_WIDTH = 400;
    private static final int SPLASH_HEIGHT = 224;
    private Pane splashLayout;


    public static void main(String[] args) throws Exception
    { launch(args); }

    @Override
    public void start(final Stage initStage) throws Exception {
        ImageView splash = new ImageView(new Image(
                SPLASH_GIF
        ));
        splashLayout = new Pane();
        splashLayout.getChildren().add(splash);

        Scene scene = new Scene(splashLayout, SPLASH_WIDTH, SPLASH_HEIGHT);
        scene.setFill(Color.TRANSPARENT);
        initStage.initStyle(StageStyle.TRANSPARENT);
        initStage.setWidth(SPLASH_WIDTH);
        initStage.setHeight(SPLASH_HEIGHT);
        initStage.setScene(scene);
        initStage.show();
        System.out.println("finished");
    }
}

Будет работать формат изображения в PNG следующим образом

public static final String SPLASH_GIF =
        "http://www.dashboardwidgets.com/showcase/data/43/homerQuotes-1p2f.png";

Это приведет к простой картине Гомера, который не ест банан. Я хотел бы иметь это с GIF.

Как это может быть возможно?

1
homerun 25 Апр 2017 в 00:41

2 ответа

Лучший ответ

При попытке вашего примера, я могу положить его на

com.sun.javafx.iio.ImageStorageException: No loader for image data

Если я использую другой URL с анимированным GIF, который загружается по http, а не по http s (http://www.picgifs.com/music-graphics/music-graphics/beatles/music-graphics-beatles-186070.gif) и там ImageView работает.

Я также загрузил Гомера с бананом и сохранил его и загрузил его

final ImageView imageView = new ImageView(new Image("file:JRQ1PegFVKXBu.gif"));

ImageView работает хорошо с этим.

Я не обнаружил никаких намеков в API JavaFX на то, что https не поддерживается, но в любом случае было бы лучше не загружать загрузочную заставку, так как это может занять много времени.

2
P.J.Meisch 26 Апр 2017 в 15:09

Ошибка из-за того, что ссылка на источник - это HTML-файл, а не GIF-файл .

Проблема в том, что ссылка в вопросе какого-то Фолка на самом деле не является изображением (даже если URL заканчивается .gif), это вместо HTML-страницы или перенаправления на HTML-страницу (вы можете увидеть это, загрузив ссылка в браузере).

Если вы замените ссылку html:

С фактической ссылкой GIF:

Тогда загрузка и отображение GIF-изображения работает как положено.

Помимо поддержки протокола для загрузки изображений

На самом деле проблема не связана с https. JavaFX API действительно правильно загружает изображения через https. Согласно изображению Javadoc:

Все URL-адреса, поддерживаемые URL-адресом можно передать конструктору. Если переданная строка не является допустимым URL-адресом, а вместо этого является путем, то в этом случае выполняется поиск изображения на пути к классам.

Базовая реализация изображений JavaFX просто открывает поток из класса URL (который можно определить с помощью поиска в исходном коде JavaFX). Таким образом, любой протокол, поддерживаемый базовой реализацией JRE, будет работать с классом изображений JavaFX. Это включает в себя протоколы http:, https:, file: и jar:; и может включать другие в зависимости от реализации JRE. Вы даже можете добавить обработчики пользовательских протоколов, если хотите ,

2
jewelsea 26 Апр 2017 в 20:32