Java:如何使用键盘事件在Java小程序中暂停移动对象一次后恢复其运动?
这是我在小程序窗口中沿x轴移动一个圆的代码。工作正常。我用线。当我按下“s”键时,它会启动,“p”键会暂停,这很好。问题是,当我在暂停一次后再次按“s”时,它会抛出一个非法的线程状态异常,我不知道如何更正它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 {
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) 然后根据需要启动、停止并重新启动计时器。