Someone asked yesterday if you can use animated GIF images in Java applications using the JFC/Swing toolkit. That's something I hadn't tried with Java and Swing before, so I wrote a quick test program, and sure enough they work.
I just load an animated GIF as an ImageIcon, then put it on a JLabel and display it on a JFrame, and the animation starts right up. Note that I'm using a Java/JDK 1.4.x release.
We were discussing this within the context of one of my test jobs crashing, and how happy I was that I could make the job crash now that we had transactions enabled on the database server to keep my job from becoming corrupt. So I joked that I felt like dancing around like Snoopy, and sure enough someone had an animated GIF of Snoopy dancing. He then asked if I could put that in the Swing application we are developing, which led me to create this sample code.
Here's a static image of what my Swing program looks like when it's running on a Windows 2000 PC:

And here's my example source code:
/**
* DevDaily.com
* A sample program showing how to use an animated gif image
* in a Java Swing application.
*/
package giftest;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class MainFrame extends JFrame {
JPanel contentPane;
JLabel imageLabel = new JLabel();
JLabel headerLabel = new JLabel();
public MainFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
contentPane.setLayout(new BorderLayout());
setSize(new Dimension(400, 300));
setTitle("Your Job Crashed!");
// add the header label
headerLabel.setFont(new java.awt.Font("Comic Sans MS", Font.BOLD, 16));
headerLabel.setText(" Your job crashed during the save process!");
contentPane.add(headerLabel, java.awt.BorderLayout.NORTH);
// add the image label
ImageIcon ii = new ImageIcon(this.getClass().getResource(
"snoopy_dancing.gif"));
imageLabel.setIcon(ii);
contentPane.add(imageLabel, java.awt.BorderLayout.CENTER);
// show it
this.setLocationRelativeTo(null);
this.setVisible(true);
} catch (Exception exception) {
exception.printStackTrace();
}
}
public static void main(String[] args) {
new MainFrame();
}
}

