如何从 Java Swing 的第一帧开始一个 .gif 文件?

Posted

技术标签:

【中文标题】如何从 Java Swing 的第一帧开始一个 .gif 文件?【英文标题】:How to start a .gif file from the first frame in Java Swing? 【发布时间】:2017-09-15 22:28:20 【问题描述】:

我正在使用两个.gif 文件并在一个框架中切换它们。

private Image currentGIF;

if(x == 0) gif = "image1.gif"
if(x == 1) gif = "image2.gif"
ImageIcon reference = new ImageIcon(gif);
currentGIF = reference.getImage();

--

public void paint(Graphics g)

    Graphics2D graphic = (Graphics2D) g;
    graphic.drawImage(gif, 0, 0, this);
    g.dispose();

--

@Override   public void actionPerformed(ActionEvent arg0) 

    repaint();

这是我的问题:

    image1.gif 从第一帧开始。 image2.gif 从第一帧开始。 image1.gif 从随机帧开始。

似乎.gif 一直在运行,当我再次显示image1 时,它并没有从第一帧开始。

【问题讨论】:

您可能还想看看Image#flush 【参考方案1】:

问题:

    永远不要覆盖 JFrame 的paint 方法,而是在 JPanel 的 paintComponent 方法中进行绘图。 切勿处理 JVM 为您的绘制方法(paint 或 paintComponent)提供的 Graphics 对象,因为这会破坏绘制链。 不要在绘画方法中更改 GUI 的状态(例如交换图像)。而是在某种类型的侦听器中执行此操作,该侦听器对您要用于更改图像的事件做出反应 - 例如,如果按钮按下时发生更改,则为按钮的 ActionListener,如果图像发生更改,则为 Swing Timer 的 ActionListener在计时器更改时。 如果这不是动画 GIF,强烈考虑将图像制作成 ImageIcon,然后简单地将使用 setIcon(...) 的 JLabel 图标再次与您希望使用的侦听器交换。

【讨论】:

以上是关于如何从 Java Swing 的第一帧开始一个 .gif 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何把上传的视频用该视频的第一帧的缩略图显示

视频封面设置为第一帧

如何使用ffmpeg提取视频中的第一帧?

web获取视频图片第一帧

Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程

如何截取视频的第一帧图片