中断正在运行的线程以执行由JButton单击触发的操作

时间:2014-10-22 08:37:53

标签: java actionlistener

我们仍在使用讨厌的机器人并且遇到了另一个问题(在解决了我们的包裹问题之后)。 我们有一个在线程中运行的机器人。他不断向前运行(move()方法)并检查currentDir变量是否已更改。如果它发生了变化,他会打另一种方法来面对新的方向。

我们的问题是我们必须以某种方式更改currentDir变量。我们想通过调用在线程中运行的机器人的setDir()方法来实现这一点。 事件发生后,由JButton触发调用此函数。 但我们无法设法中断线程来调用此方法。

是否有可能创建一个侦听器在线程中侦听由JButton触发的ActionEvent?

   public void run()
    {
          //Infinite while-loop to check for the Direction of the robot
          while(true)
          {
                 if(currentDir != getDirection()) // if currentdir is not
                 {
                       if(currentDir == Direction.NORTH)
                            goNorth();
                       else if(currentDir == Direction.EAST)
                            goEast();
                       else if(currentDir == Direction.SOUTH)
                            goSouth();

                       else
                            goWest();
                  }
                  else
                       move();
          }
    }

1 个答案:

答案 0 :(得分:0)

您不需要从同一个线程设置方向。如果您从侦听器中的UI线程设置它,则线程应该能够将其拾取。

您可能还想制作方向变量volatilehttp://www.javamex.com/tutorials/synchronization_volatile_typical_use.shtml