Java 摆动计时器不工作

Java 摆动计时器不工作,java,swing,timer,Java,Swing,Timer,我正在为一个班级制作一个街机游戏。游戏很有趣。我试图使所有自由浮动块每秒下降一次。我的代码可以让它们坠落,但计时器不能。下面是我代码的相关部分 前两个出现在我用来管理内部逻辑的BlockManager对象中 public void play(){ t = new Timer(1000, this); t.start(); } public void actionPerformed(ActionEvent e) { for(int v = 0;v < this

我正在为一个班级制作一个街机游戏。游戏很有趣。我试图使所有自由浮动块每秒下降一次。我的代码可以让它们坠落,但计时器不能。下面是我代码的相关部分

前两个出现在我用来管理内部逻辑的BlockManager对象中

public void play(){
    t = new Timer(1000, this);
    t.start();
    }
public void actionPerformed(ActionEvent e) {
    for(int v = 0;v < this.x; v++){
        if(v > this.x || v < 0){
            break;
            }
            for(int b = 0;b < this.y ;b++){
                this.gameScreen.get(v).get(b).setActive(true);
            }
        }
        for(int i = 0;i < this.x; i++){
            if(i > this.x || i < 0){
                break;
            }
            for(int j = 0;j < this.y ;j++){
                if(this.gameScreen.get(i).get(j).getActive() == true){
                    if(j + 1 < this.y){
                        if(this.gameScreen.get(i).get(j+1).toString().equals(".")){ 
    Collections.swap(this.gameScreen.get(i), j, j+1);
    this.gameScreen.get(i).get(j+1).setActive(false);
                        }
                    }
                }
            }
        }
    }

this is the main method that is another file. 

public static void main(String[] args){
    ColumnsUI Col = new ColumnsUI(9,9);
    Col.game.nextBlock();
    Col.gw.add(Col.show);
    Col.game.play();
}
public void play(){
t=新定时器(1000,此);
t、 start();
}
已执行的公共无效操作(操作事件e){
for(intv=0;vthis.x | | v<0){
打破
}
for(intb=0;bthis.x | | i<0){
打破
}
for(int j=0;j
columns UI对象是一种基于内部逻辑绘制的简单方法。我怀疑它与计时器故障有任何关系,因为当我手动调用actionPerformed的内容时,它起作用了


谢谢你的帮助

当某个事件发生时,将调用ActionPerformed。您应该为计时器创建一个单独的类。就像在这段代码中一样,当然任务类必须被移动砖块的代码替换

Timer timer = new Timer();

// Start in 1 second and then all 5 seconds forever repatedly
timer.schedule( new Task(), 1000, 5000 );

请看一下

这是错误的,原因有两个:一是没有必要为ActionLIstener创建单独的类;第二,您指的是java.util.Timer,但这个问题是关于javax.swing.Timer的。@VGR如果您读过这个问题,您就会知道他想在ActionPerfMed方法中执行代码。我认为他根本不需要这样的方法。TimerTask做得很好。我已经用过我的swing游戏;)你把它倒过来了。Swing代码必须在AWT事件调度线程中运行。javax.swing.Timer会自动执行此操作;java.util.Timer不知道。
你知道解决方案还是只想教我?
两者都知道。解决方法是使用摆动计时器。不,不是。这已经是问题的一部分。解决方案包括如何使用它;)“我的代码使它们下降工作,但计时器不工作。”请提供比“不工作”更多的信息。您希望发生什么?发生了什么事?我希望actionPerformed中的代码能够执行。当我将它移出该方法并手动执行它时,它完全执行了它的预期操作,也就是说它向下移动了块执行与问题中显示的不同的play()方法?