2017-04-24 287 views
1

最近我开发了一个个人软件来帮助我完成我的日程安排。我试图让荷马辛普森的闪屏吃饭,作为一个很酷的启动闪屏,但不幸的是,GIF不会播放。JavaFX Splash场景与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来制作它。

怎么可能?

+0

请编辑问题并将gif添加到问题中。如果它与PNG一起工作,它也应该“与gif一起工作”。所以只要JavaFX正确理解你的特定gif文件格式(它应该......),它就应该可以工作。我不知道你是否在阻止gif动画运行的JavaFX应用程序线程上做其他工作。要确定任何加载格式失败,可以将侦听器添加到图像错误和异常属性,并使用System.out调试例程输出其值。 – jewelsea

+0

@jewelsea我已经完成了原始帖子中的问题仍然存在的孤立代码示例。 –

回答

2

当尝试你的榜样,我可以把它归结为一个

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

如果我使用一个不同的URL与通过HTTP加载动画GIF,而不是通过HTTP 小号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的工作人的权利与加载它。

我在JavaFX API中没有发现HTTPS不支持的提示,但无论如何都不会在启动splashscreen中下载,因为这可能需要很长时间。

+0

@jewelsea你应该发布这个答案,因为它是正确的答案 –

+0

是的,改变了评论以回答。 – jewelsea

+0

@jewelsea向上投票 –

2

失败是因为源链接到HTML文件不是一个GIF文件

的问题是,在一些民间的问题的链接是不实际的图像(即使在URL中.gif结束)它是一个HTML页面或重定向到一个HTML页面(您可以通过在浏览器中加载链接来查看)。实际GIF链接

如果替换HTML链接

那么GIF图像加载和显示作为预计。

除了对图像加载

协议支持,其实问题不相关的HTTPS。 JavaFX API确实通过https正确加载图像。根据图片javadoc:

URL支持的所有URL都可以传递给构造函数。如果传递的字符串不是有效的URL,而是路径,则在该情况下,将在类路径中搜索图像。

来自URL类(可以通过搜索JavaFX源代码来确定)的底层JavaFX图像实现opens a stream。因此,底层JRE实现支持的任何协议都可以与JavaFX图像类一起使用。这包括http:,https:,file:jar:协议;并可能根据JRE的实施情况包括其他人。如果您愿意,您甚至可以添加custom protocol handlers