Java 我在JLabel中添加了一个gif,但它只播放一次,而且不会';t继续,我如何修复它?
然后我将标签添加到我的面板中,它只播放一次如果gif未设置为循环,正确的解决方案是修改gif使其循环 出于好奇,我模仿了这个例子。如果我想独立于gif的动画设置来设置gif的动画,该怎么办Java 我在JLabel中添加了一个gif,但它只播放一次,而且不会';t继续,我如何修复它?,java,swing,jlabel,gif,Java,Swing,Jlabel,Gif,然后我将标签添加到我的面板中,它只播放一次如果gif未设置为循环,正确的解决方案是修改gif使其循环 出于好奇,我模仿了这个例子。如果我想独立于gif的动画设置来设置gif的动画,该怎么办 JLabel two = new JLabel(); ImageIcon jaina= new ImageIcon("images/jaina.gif"); two.setBounds(0,0,300,300); two.setIcon(jaina); import javax.swin
JLabel two = new JLabel();
ImageIcon jaina= new ImageIcon("images/jaina.gif");
two.setBounds(0,0,300,300);
two.setIcon(jaina);
import javax.swing.JFrame;
导入javax.swing.Timer;
导入javax.swing.ImageIcon;
导入javax.swing.JLabel;
导入javax.imageio.imageio;
导入javax.imageio.ImageReader;
导入javax.imageio.stream.FileImageInputStream;
导入java.util.List;
导入java.util.ArrayList;
导入java.io.File;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
导入java.awt.EventQueue;
公共类标签{
公共静态void startGui(列表IMG){
JFrame=新的JFrame(“动画gif”);
JLabel标签=新的JLabel();
框架。添加(标签);
label.setIcon(imgs.get(0));
计时器t=新计时器(30,新ActionListener(){
int i=0;
@凌驾
已执行的公共无效操作(操作事件evt){
label.setIcon(imgs.get(i));
i=(i+1)%imgs.size();
}
});
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
t、 start();
}
公共静态void main(字符串[]args)引发异常{
ImageReader=ImageIO.getImageReadersBySuffix(“GIF”).next();
setInput(新文件ImageInputStream(新文件(“images/jaina.gif”));
int n=reader.getNumImages(true);
List imgs=new ArrayList();
对于(int i=0;i{
startGui(imgs);
});
}
}
这比确保GIF格式正确要脆弱得多。考虑到原始的
新图像图标(“…”),还有更多的代码代码>处理所有内容。如果您使用任何其他工具(如浏览器)查看它,它是否会重复?不要使用收进框(…)。Swing是为配合使用而设计的。我只是想提一下挫折,如果你在使用它,我怀疑你的布局有问题,但我们还需要更多的东西。如果没有挫折,这绝对有效。1)为了更快地获得更好的帮助,添加一个or。在这种情况下,它应该只需要20-30行代码。2) 例如,获取图像的一种方法是热链接到中看到的图像。例如,嵌入到中的图像的热链接。警告:在这种情况下,我怀疑这是一个只循环一次的GIF,最好是(上传&)链接到该GIF。是的,它只循环一次,但如何保持循环
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.FileImageInputStream;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.EventQueue;
public class GifLabel{
public static void startGui( List<ImageIcon> imgs){
JFrame frame = new JFrame("animated gif");
JLabel label = new JLabel( );
frame.add(label);
label.setIcon(imgs.get(0));
Timer t = new Timer( 30, new ActionListener(){
int i = 0;
@Override
public void actionPerformed( ActionEvent evt ){
label.setIcon ( imgs.get(i) );
i = (i+1)%imgs.size();
}
});
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
t.start();
}
public static void main(String[] args) throws Exception{
ImageReader reader = ImageIO.getImageReadersBySuffix("GIF").next();
reader.setInput( new FileImageInputStream( new File("images/jaina.gif")));
int n = reader.getNumImages( true );
List<ImageIcon> imgs = new ArrayList<>();
for(int i = 0; i<n; i++){
imgs.add( new ImageIcon(reader.read(i)) );
}
EventQueue.invokeLater( ()->{
startGui(imgs);
});
}
}