带线程的java简单动画

带线程的java简单动画,java,multithreading,animation,runnable,Java,Multithreading,Animation,Runnable,我希望创建一个简单的2D动画使用线程。一旦线程启动,我就很难准确地确定在run方法中应该放什么。现在,粒子类的对象绘制在帧上,但没有动画。此外,我还可以使用您的帮助,了解如何在用户关闭框架时关闭线程 public class ParticleFieldWithThread extends JPanel implements Runnable{ private ArrayList<Particle> particle = new ArrayList<Particle>();

我希望创建一个简单的2D动画使用线程。一旦线程启动,我就很难准确地确定在run方法中应该放什么。现在,粒子类的对象绘制在帧上,但没有动画。此外,我还可以使用您的帮助,了解如何在用户关闭框架时关闭线程

public class ParticleFieldWithThread extends JPanel implements Runnable{
private ArrayList<Particle> particle = new ArrayList<Particle>();

boolean runnable; 
public ParticleFieldWithThread (){
    this.setPreferredSize(new Dimension(500,500));


    for(int i = 0; i < 100; i++) { 
        particle.add(new Particle());
    }
    Thread t1 = new Thread();
    t1.start();




}
public void run () {
    while (true ) {
        try {
            Thread.sleep(40);
            for (Particle p : particle) {                   
                p.move();                   

            }
            repaint();

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        }


    }



   public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(Color.RED);

        for (Particle p : particle) {
            g2.fill(new Rectangle2D.Double(p.getX(), p.getY(), 3, 3));
        }           

    }
   public static void main(String[] args) {
        final JFrame f = new JFrame("ParticleField");
        final ParticleFieldWithThread bb = new ParticleFieldWithThread();
        f.setLayout(new FlowLayout());
        f.add(bb);

        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

这毫无用处:

Thread t1 = new Thread();
t1.start();
您需要将Runnable(在代码中,它将是类的当前对象,
this
)传递到线程的构造函数中,使其具有任何意义或功能。i、 e

Thread t1 = new Thread(this);
t1.start();

为了我的钱,我会做一些完全不同的事情,使用一个摆动计时器来制作简单的摆动动画。

这没有任何用处:

Thread t1 = new Thread();
t1.start();
您需要将Runnable(在代码中,它将是类的当前对象,
this
)传递到线程的构造函数中,使其具有任何意义或功能。i、 e

Thread t1 = new Thread(this);
t1.start();

为了我的钱,我会做一些完全不同的事情,并且会使用一个摆动计时器来制作简单的摆动动画。

如果你想制作连续动画,最好使用它。我很好奇,想知道摆动
计时器有什么问题。这引入了在更新粒子时UI被绘制的风险…Swing计时器没有问题,这是一个家庭作业问题。这个问题要求我们用线程而不是计时器来制作动画。如果你要用连续动画,最好用它。我很想知道Swing
计时器有什么问题。这引入了在更新粒子时UI被绘制的风险…Swing计时器没有问题,这是一个家庭作业问题。这个问题要求我们用线程而不是计时器来制作动画