我需要两个定时器。一个用来运行游戏,比如移动对象,执行检查,另一个作为倒数计时器。我尝试了以下几点:
Timer countdownTimer = new Timer(1000,this);
Timer gameTimer = new Timer(30,this);
public void init()
{
this.actionPerformed(this); //add action listener to content pane
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == gameTimer)
{
// control the game
}
if(e.getSource() == countdownTimer)
{
//decremenet the timer
}
}但是,当我试图运行applet时,这会返回一个空指针异常。如何正确区分每个定时器和另一个计时器,并在每个计时器滴答时执行所需的操作。谢谢
发布于 2013-06-22 06:18:12
我假设您使用的是javax.swing.Timer类?this.actionPerformed(this);似乎不正确,因为您的applet不是ActionEvent。此外,您应该在init()方法中启动定时器:
public class GameApplet extends Appel implements ActionListener
public void init()
{
countdownTimer = new Timer(1000,this);
gameTimer = new Timer(30,this);
countdownTimer.start();
gameTimer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == gameTimer) {
// control the game
}
if(e.getSource() == countdownTimer) {
//decremenet the timer
}
}
}检查同样重定向到计时器javadoc的关于计时器的Java教程。
发布于 2013-06-22 06:27:43
使用ScheduledExecutorService。它比计时器更有效率。若要查看其效果,请运行以下代码。
class GameControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForGame() {
final Runnable beeper = new Runnable() {
@Override
public void run() {
System.out.println("Game");
}
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 30, 30, SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
beeperHandle.cancel(true);
}
}, 60 * 60, SECONDS);
}
public void beepCountDown() {
final Runnable beeper = new Runnable() {
@Override
public void run() {
System.out.println("count down");
}
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 1, 1, SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
beeperHandle.cancel(true);
}
}, 60 * 60, SECONDS);
}
public static void main(String[] args) {
GameControl bc=new GameControl();
bc.beepCountDown();
bc.beepForGame();
}
}https://stackoverflow.com/questions/17247821
复制相似问题