title: Moving Rectangle Shapes in JavaFX with a thread
body: <p>I have a strange problem that I need help with. 
  This is a very simple application. I have a Rectangle Shape saved in a Car object. </p>
  
  <pre><code>public class Car {
  
      private Rectangle rect;
      private TheFourCarDeadlock.direction direction;
  
      public Car(Rectangle r, TheFourCarDeadlock.direction d) {
          this.rect = r;
          this.direction = d;
      }
  
      public void move() {
  
          double xPos;
          double yPos;
          switch (direction) {
              case left:
                  // make sure x is a positive nr between 0 and 600
                  xPos = (rect.getX() - 1) % 600;
                  if (xPos &lt; 0) {
                      xPos = 600;
                  }
                  rect.setX(xPos);
                  System.out.println(String.format("move left, x: %1.0f", xPos));
                  break;
              case right:
                  xPos = (rect.getX() + 1) % 600;
                  rect.setX(xPos);
                  System.out.println(String.format("move right, x: %1.0f", xPos));
                  break;
              case up:
                  yPos = (rect.getY() - 1) % 600;
                  rect.setY(yPos);
                  break;
              case down:
                  yPos = (rect.getY() + 1) % 600;
                  rect.setY(yPos);
                  break;
              default:
                  throw new AssertionError(direction.name());
  
          }
      }
  }
  </code></pre>
  
  <p>The class Car move a car object to the left or right depending on the direction that is set.</p>
  
  <pre><code>public class TheFourCarDeadlock extends Application {
  
      int maxWidth = 600;
      int maxHeight = 600;
  
      Car carFromLeft;
      Car carFromRight;
  
      public static enum direction {
  
          left, right, up, down
      };
  
      @Override
      public void start(Stage primaryStage) {
  
          // setup
          Group root = new Group();
          Scene scene = new Scene(root, maxWidth, maxHeight);
  
          // cars
          // cars on left side going right
          Rectangle leftSide = new Rectangle(0, 350 - 10, 20, 20);
          leftSide.setFill(Color.BLUE);
          root.getChildren().add(leftSide);
          carFromLeft = new Car(leftSide, direction.right);
  
  
          // cars on right side going left
          Rectangle rightSide = new Rectangle(600, 250 + 10, -20, -20);
          rightSide.setFill(Color.BLUE);
          root.getChildren().add(rightSide);
          carFromRight = new Car(rightSide, direction.left);
  
          primaryStage.setTitle("The Four Car Deadlock");
          primaryStage.setScene(scene);
          primaryStage.show();
  
          Thread t = new Thread(new DrawRunnable());
          t.start();
      }
  
      public void moveCars() {
  
          carFromLeft.move();
          carFromRight.move();
  
      }
  
      private class DrawRunnable implements Runnable {
  
          @Override
          public void run() {
              try {
                  while (true) {
                      Thread.sleep(30);
                      Platform.runLater(new Runnable() {
                          @Override
                          public void run() {
                              moveCars();
                          }
                      });
                  }
              } catch (InterruptedException ex) {
                  System.out.println("Interrupted");
              }
          }
  
      }
  
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
          launch(args);
      }
  
  }
  </code></pre>
  
  <p>In the main application I create two cars, one going right and one going left. I move each car every 30 ms with a Thread t. </p>
  
  <p>Now, the weird thing that I don't understand is that the <strong>carFromLeft</strong> works fine and is displayed in the form and then moved to the right as I planned. The <strong>carFromRight</strong>, that have exactly the same code and made the same way. Just stands still... Even though in the output it prints that the position x of the rectangle is changing like it's supposed to. </p>
  
  <p>In the output I get this: </p>
  
  <pre><code>move left, x: 436
  move right, x: 165
  move left, x: 435
  move right, x: 166
  move left, x: 434
  move right, x: 167
  move left, x: 433
  move right, x: 168
  move left, x: 432
  move right, x: 169
  move left, x: 431
  move right, x: 170
  move left, x: 430
  </code></pre>
  
  <p>So the rectangles change their x position. One going left and one going right. But only the one moving to the right is updated and drawn in the form... What is going on? </p>