【发布时间】:2014-09-24 21:27:53
【问题描述】:
我正在编写一个代码来移动特定数量的形状。我已将此代码放在一个循环中,以便程序移动形状 10 次。但是,不仅仅是显示最后的输出,我还想看到形状移动。所以,我在一个单独的线程中实现了 sleep 方法。但是,形状仍然快速移动,我只看到最终输出。
有人知道这里的问题是什么,我该如何解决?
代码:
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("START"))
{
for(int i=0;i<100;i++)
{
pf.particleFilter();
repaint();
sleepFunction();
}
}
}
private void sleepFunction()
{
System.out.println("In sleep thread");
Thread mythread = new Thread()
{
public void run()
{
try
{
System.out.println("Going to sleep!");
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
};
mythread.start();
}
public void particleFilter()
{
move();
}
public void move()
{
setXPosition_robot(robot_x);
setYPosition_robot(robot_y);
setXPosition_particle(particle_x);
setYPosition_particle(particle_y);
}
【问题讨论】:
-
你正在创建一个新线程,让它休眠一秒钟,然后线程结束。这不会以任何方式与 GUI 线程交互。您可能有兴趣了解Swing Timers。
-
@DSquare 所以,我应该删除线程并在 repaint() 之后使用一个计时器,例如 Timer timer = new Timer(1000, this); timer.setInitialDelay(1); timer.start();
标签: java multithreading swing