Анимация изображения gif загружается только один раз с ImageIcon - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь показать анимацию, используя gif.Я использовал Image и ImageIcon.То, что я сделал здесь, я использую поток, чтобы нарисовать одно и то же изображение три раза.

То, что происходит в этом коде, это то, что в первый раз изображение работает хорошо и отображает анимацию в виде изображения GIF.Однако в других случаях он просто показывает неподвижное изображение со вторым кадром.

public class Check extends JFrame {

private JLabel statusbar;
private JLabel timer;

public Check() {

    initUI();
}

private void initUI() {

    statusbar = new JLabel("");
    timer = new JLabel("Time Starts Now");
    add(statusbar, BorderLayout.SOUTH);
    add(timer, BorderLayout.NORTH);     
    add(new CheckBoard(statusbar,timer));      
    setResizable(false);
    pack();

    setTitle("Minesweeper");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {

    EventQueue.invokeLater(() -> {
        Check ex = new Check();
        ex.setVisible(true);
    });
}


}

CheckBoard.java

public class CheckBoard extends JPanel implements Runnable{

  private static JLabel statusbar;
  private static JLabel timer;
  private int x,y;


 public CheckBoard(JLabel statusbar, JLabel timer) {

            setPreferredSize(new Dimension(500, 500));
    this.statusbar = statusbar;
    this.timer = timer;
    Thread threadsss= new Thread(this);
    x=50;
    y=50;
    threadsss.start();
}


@Override
public void paintComponent(Graphics g) {
    try{
                    Image icon = new ImageIcon(getClass().getResource("/resources/anim.gif")).getImage();
                    g.drawImage(icon,x,y, this);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
}


public void run(){
    for(int i=0;i<=3;i++){
        try{
        Thread.sleep(2000);
    }catch(Exception e){

    }
        x+=50;
        y+=50;
        repaint();
    }
}
}

Я почти уверен, что это какая-то проблема с кешем.Может кто-то

...