Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我在JLabel中添加了一个gif,但它只播放一次,而且不会';t继续,我如何修复它?_Java_Swing_Jlabel_Gif - Fatal编程技术网

Java 我在JLabel中添加了一个gif,但它只播放一次,而且不会';t继续,我如何修复它?

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

然后我将标签添加到我的面板中,它只播放一次

如果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.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);
      });
    }
}