Я пытаюсь показать анимацию, используя 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();
}
}
}
Я почти уверен, что это какая-то проблема с кешем.Может кто-то