Java:如何使用键盘事件在Java小程序中暂停移动对象一次后恢复其运动?

Java:如何使用键盘事件在Java小程序中暂停移动对象一次后恢复其运动?,java,multithreading,applet,Java,Multithreading,Applet,这是我在小程序窗口中沿x轴移动一个圆的代码。工作正常。我用线。当我按下“s”键时,它会启动,“p”键会暂停,这很好。问题是,当我在暂停一次后再次按“s”时,它会抛出一个非法的线程状态异常,我不知道如何更正它 import java.awt.*; import java.awt.event.*; import java.applet.*; public class MovingCircle extends Applet implements KeyListener, Runnable {

这是我在小程序窗口中沿x轴移动一个圆的代码。工作正常。我用线。当我按下“s”键时,它会启动,“p”键会暂停,这很好。问题是,当我在暂停一次后再次按“s”时,它会抛出一个非法的线程状态异常,我不知道如何更正它

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class MovingCircle extends Applet implements KeyListener, Runnable {

  Thread t; //thread to control motion
  boolean flag; //variable to control pausing of circle
  int x=50;
  int y=50;
  char c;

  public void init(){
      setBackground(Color.cyan);
      addKeyListener(this);
  }

  public void start(){
    t = new Thread(this);
  }

  //starting point for thread
  public void run()
  {
    for(;;){
      try{
          Thread.sleep(1000);
          x = x+10;
          repaint();
          if(flag){
              break;
          } 
      } catch(Exception e){

        }
     }
   }

   public void paint(Graphics g){
      g.fillOval(x,y,50,50);
   }

  public void keyPressed(KeyEvent k) {      
    c = k.getKeyChar();
    if(c=='s') t.start();
    if(c=='p') flag = true;
  }

  public void keyReleased(KeyEvent k) {}


  public void keyTyped(KeyEvent k) {}
}

停止线程时,无法重新启动它

对于本例,将其放入一个循环中,并完全放弃多线程处理…

1)使用Swing。2) 使用摆动计时器。3) 然后根据需要启动、停止并重新启动计时器。