Java - изображение не отображается до конца цикла? - PullRequest
1 голос
/ 28 сентября 2011

В Java я успешно вывел изображение на экран. Теперь я хочу заставить его двигаться, пропустив цикл for. Цикл for работает 10 раз и спит по 1 секунде каждый раз. Вместо того, чтобы перемещать изображение каждую секунду, как ожидалось, мне нужно подождать 10 секунд, а затем появится 10 изображений.

Вот мой код:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class ImageDraw extends JComponent {
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Image img1 = Toolkit.getDefaultToolkit().getImage("player.png");

        int x = 0;
        int y = 0;

        for(int i = 0;i<10;i++){
            try {
                Thread.sleep(1000);
                x+=10;
                y+=10;
                g2.drawImage(img1, x, y, this);
                repaint();
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.exit(0);
            }   
        }   //end for

    }   //end paint

}   //end class

Как бы я сделал так, чтобы изображение выглядело так, как будто оно движется каждый раз, когда проходит через цикл?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

В дополнение к другим предложениям:

  1. Никогда не читайте изображение в методе рисования.Прочитайте изображение, когда вы создаете класс, или передайте его с помощью метода setImage (...).

  2. Произвольное рисование выполняется путем переопределения метода paintComponent (), а не рисования() метод.

1 голос
/ 28 сентября 2011

Используйте Timer для этого и избавьтесь от Thread.sleep(). Вы запускаете этот код в потоке пользовательского интерфейса, а когда вы вызываете Thread.sleep(), вы переводите поток пользовательского интерфейса в спящий режим, что означает отсутствие обновления до завершения всего цикла.

...