Java:drawImage动画gif在第一帧冻结

Java:drawImage动画gif在第一帧冻结,java,image,graphics,awt,gif,Java,Image,Graphics,Awt,Gif,我得到了在小程序中绘制图像的代码,但它是一个动画gif,并且在第一帧停止,就好像它是一个单独的图像一样 这应该是恐怖的骷髅舞,但他只是站着不动 这是我的密码: import java.util.*; import java.awt.*; import java.applet.*; import java.net.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.*; publ

我得到了在小程序中绘制图像的代码,但它是一个动画gif,并且在第一帧停止,就好像它是一个单独的图像一样

这应该是恐怖的骷髅舞,但他只是站着不动

这是我的密码:

import java.util.*;
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;

public class Spooky extends Applet
{
Image scary, trumpet, walking;
MediaTracker mt;
AudioClip spoopy;
Graphics buffer;
Image offscreen;
Dimension dim;

public void init()
{
setLayout(null);
mt = new MediaTracker(this);


mt.addImage(scary,1);
mt.addImage(trumpet,1);
mt.addImage(walking,1);
spoopy = getAudioClip(getDocumentBase(),"spoopy.wav");
spoopy.loop();
}

public void paint(Graphics g)
{
  try
{
    URL url = this.getClass().getResource("spooky.gif");
    BufferedImage img;
    img = ImageIO.read(url);
    mt.addImage(img,1);
    g.drawImage(img,0,0,300,300,this);
}
catch(IOException e)
{
}

}
}

我不知道这是否有帮助,但通常情况下,动画需要单独的线程/可运行线程,其余代码需要单独的线程/可运行线程。至少这是我在做一个小游戏时遇到的一个问题。试试这个,如果有帮助请告诉我:)

也请检查此项:

更新:我发现的一个例子()使用了支持GIF的JApplet(Applet是旧的)


你有没有试着不放声音来看看动画是否单独工作?可能声音需要一个单独的可运行/线程,我不知道这是否有帮助,但通常情况下,动画需要一个单独的线程/可运行,其余代码需要一个单独的线程。至少这是我在做一个小游戏时遇到的一个问题。试试这个,如果有帮助请告诉我:)

也请检查此项:

更新:我发现的一个例子()使用了支持GIF的JApplet(Applet是旧的)


你有没有试着不放声音来看看动画是否单独工作?可能声音需要一个单独的可运行/线程,我不知道这是否有帮助,但通常情况下,动画需要一个单独的线程/可运行,其余代码需要一个单独的线程。至少这是我在做一个小游戏时遇到的一个问题。试试这个,如果有帮助请告诉我:)

也请检查此项:

更新:我发现的一个例子()使用了支持GIF的JApplet(Applet是旧的)


你有没有试着不放声音来看看动画是否单独工作?可能声音需要一个单独的可运行/线程,我不知道这是否有帮助,但通常情况下,动画需要一个单独的线程/可运行,其余代码需要一个单独的线程。至少这是我在做一个小游戏时遇到的一个问题。试试这个,如果有帮助请告诉我:)

也请检查此项:

更新:我发现的一个例子()使用了支持GIF的JApplet(Applet是旧的)


你有没有试着不放声音来看看动画是否单独工作?可能声音需要一个单独的可运行/线程,问题在于
ImageIO.read(url)方法。不知道如何,但在内部,它会弄乱gif的读取。相反,从URL构造一个
ImageIcon
,并使用
ImageIcon
getImage()
来获取一个
Image

另外,不要在
paint
方法中加载图像。在
init
方法中加载它

public class Spooky extends Applet {
    Image image;

    public void init() {
        URL url = this.getClass().getResource("spooky.gif");
        image = new ImageIcon(url).getImage();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(image, 0, 0, 300, 300, this);
    }  
}

问题是
ImageIO.read(url)方法。不知道如何,但在内部,它会弄乱gif的读取。相反,从URL构造一个
ImageIcon
,并使用
ImageIcon
getImage()
来获取一个
Image

另外,不要在
paint
方法中加载图像。在
init
方法中加载它

public class Spooky extends Applet {
    Image image;

    public void init() {
        URL url = this.getClass().getResource("spooky.gif");
        image = new ImageIcon(url).getImage();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(image, 0, 0, 300, 300, this);
    }  
}

问题是
ImageIO.read(url)方法。不知道如何,但在内部,它会弄乱gif的读取。相反,从URL构造一个
ImageIcon
,并使用
ImageIcon
getImage()
来获取一个
Image

另外,不要在
paint
方法中加载图像。在
init
方法中加载它

public class Spooky extends Applet {
    Image image;

    public void init() {
        URL url = this.getClass().getResource("spooky.gif");
        image = new ImageIcon(url).getImage();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(image, 0, 0, 300, 300, this);
    }  
}

问题是
ImageIO.read(url)方法。不知道如何,但在内部,它会弄乱gif的读取。相反,从URL构造一个
ImageIcon
,并使用
ImageIcon
getImage()
来获取一个
Image

另外,不要在
paint
方法中加载图像。在
init
方法中加载它

public class Spooky extends Applet {
    Image image;

    public void init() {
        URL url = this.getClass().getResource("spooky.gif");
        image = new ImageIcon(url).getImage();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(image, 0, 0, 300, 300, this);
    }  
}
我也有类似的问题。这是一个解决办法。但是,如果您试图从InputStream加载GIF(在我的案例中就是这种情况),则需要不同的解决方案。在本例中,我将使用Toolkit类加载您的映像,更具体地说:

我也有类似的问题。这是一个解决办法。但是,如果您试图从InputStream加载GIF(在我的案例中就是这种情况),则需要不同的解决方案。在本例中,我将使用Toolkit类加载您的映像,更具体地说:

我也有类似的问题。这是一个解决办法。但是,如果您试图从InputStream加载GIF(在我的案例中就是这种情况),则需要不同的解决方案。在本例中,我将使用Toolkit类加载您的映像,更具体地说:

我也有类似的问题。这是一个解决办法。但是,如果您试图从InputStream加载GIF(在我的案例中就是这种情况),则需要不同的解决方案。在本例中,我将使用Toolkit类加载您的映像,更具体地说:


如果我对JFrame了解很多,那将非常有用。抱歉,JFrame与此无关-请参阅内部内容;)-检查我的更新,虽然这对普通图像很有用,但你知道我如何让它与BuffereImage一起工作吗?正如我在上面的同一评论中所说:@RyanDwyer From“你可以尝试,但它只会将GIF的“当前”帧绘制到BuffereImage。BuffereImage对象只是静态像素桶,因此它们无法“动画化”如果我对JFrame了解很多,那将非常有用。抱歉,JFrame与此无关-请参阅内部内容;)-检查我的更新,虽然这对普通图像很有效,但你知道我如何才能让它与BuffereImage一起工作吗?正如我在上面的同一评论中所说:@RyanDwyer From“你可以尝试,但它只会将GIF的“当前”帧绘制到BuffereImage。BuffereImage对象只是静态像素桶,所以