我想在我的应用程序中显示动画gif。我按照此处的代码进行了操作:Show animated GIF
当我运行我的代码时,我收到MalformedURLException错误,我的应用程序将无法运行。以下是我的工作原理。
调用createVisuals()的方法:
private void defaultGUI() {
frame.setTitle("Class Map");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0));
frame.setBounds(0, 0, frameWidth, frameWidth/2);
frame.getContentPane().setBackground(Color.WHITE);
frame.setUndecorated(true);
try {
Visuals.createVisuals();
} catch (MalformedURLException e) {
e.printStackTrace();
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
}
显示gif的方法:
public class Visuals {
public static void createVisuals() throws MalformedURLException{
URL cwURL = new URL("src\\images\\classmap_colorwheel-gif.gif");
Icon cwGif = new ImageIcon(cwURL);
JLabel cwIcon = new JLabel(cwGif);
GUI.frame.getContentPane().add(cwIcon);
}
我做得不好?
编辑: laksys指出我的URL构造错误并提供了修复它的参考。问题是我没有提供完整的文件位置以及将URL添加到URL的开头。
URL cwURL = new URL("src\\images\\classmap_colorwheel-gif.gif");
URL cwURL = new URL("File:C:/Users/01526460/Desktop/ClassMap/src/images/classmap_colorwheel-gif.gif");
这导致异常消失,但gif无法正常运行。只有一帧gif序列加载而其他帧只加载一部分。 gif也比它应该更快地循环。
编辑2: 我发现gif没有正确循环,因为我的方式,而不是因为Java。我用Photoshop CS6创建了一个帧动画。当我在帧之间以0秒延迟运行帧动画时,它在Photoshop中看起来很好。但是,当通过Java解释0秒延迟时,gif实际上是在帧之间尝试0秒。如果其他人遇到此问题,请确保帧之间的延迟不设置为0. Java不会自动控制gif的帧速率(就像许多浏览器一样)。