为什么我的run()方法没有从我的Actionlistener

时间:2015-07-16 11:48:56

标签: java eclipse multithreading

我正在开发一个Snake实现,而且大部分都已完成。我唯一的问题是,当我点击开始新游戏的JMenuItem时,游戏会冻结。这是相关的代码:

             this.newGame.addActionListener(new ActionListener()
                 {
             @Override
             public void actionPerformed(ActionEvent e){
                 neuesSpiel();
             }

                 });





             public void neuesSpiel()
             {     //The old snake game is finished and the playing field is reseted
                  if(snake!=null)
                  {
                      snake.beendeSpiel();

                      for(int i=0; i<20;i++)
                      {
                           for(int j=0;j<10;j++)
                           {    
                            spielfeld[i][j] = false;
                            }
                      }

                  }//the new snake game is created below
                  snake = new Snake(null,null, 10,5, this);     
                  Snake snake2 = new Snake(snake,null,11,5,this);
                  snake.hintermann = snake2;
                  snake2.hintermann = new Snake(snake2,null,12,5,this);

                  snake.run();
               }

在班级Snake:

public void run()
{
Game.zf.requestFocus();

while(spiellauf){
try
{
    Thread.sleep( 120 );
} 
catch ( InterruptedException e ) { }
if(spiellauf)
bewege(); //the Snake Block is moved
}

我很确定,run()方法是问题,因为如果我不调用该方法,游戏就不会冻结。此外,方法neuesSpiel()也应该没问题,因为当我在构造函数中调用它时,它按预期工作。 我不知道除了使用线程之外我还能让我的函数等待120ms。还有其他选择吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

  

我不知道除了使用线程之外我还能让我的函数等待120ms。

您没有使用线程。您正在当前线程中执行run方法。

如果您希望在新主题中运行它,则需要以下内容:

new Thread(snake).start();