Одновременная работа Animation Timer и сетевого потока

Работаю над созданием сетевой игры и появилась проблема с потоками и отрисовкой изображения. Есть ли возможность обновлять окно игры через Animation Timer и заодно на фоне принимать данные через поток с сокета (например враг переместился)? Пытался закинуть код для сокета в AnimationTimer но появлялась проблема того, что за один "тик" таймера могло принять только одно действие противника и появлялась задержка Пример кода для потоков:

AnimationTimer() animationTimer = new AnimationTimer() {
        @Override
        public void handle(long now) {
          movePlayer();
          moveBackground();
          moveBullets(); //все три метода просто меняют координаты элементов на экране пользователя
          }
}

И сам сетевой поток, работающий через сокет:

@Override
    public void start() {
      OutpuStream outputStream= socket.getOutputStream();
      InputStream inputStream= socket.getInputStream();
      while(isConnected){ //проверка пока пользователь подключен
         byte[] data = new byte[1 + 8 * 4];
         inputStreamTest.read(data);
         setOpponentX(ByteBuffer.wrap(data).getShort(0));
         setOpponentY(ByteBuffer.wrap(data).getShort(1));
      }
}

Ответы (1 шт):

Автор решения: Alex

Проблема была решена путём реализации "собственного Animation Timer". Для этого был создан обычный поток с выставленной задержкой, которая обеспечивает ту же частоту обновлений что и Animaion Timer. Стоит обратить внимание на то, что в обычном потоке нельзя взаимодействовать/видоизменять элементы JavaFX напрямую. Решением данной проблемы является использование Platfrorm.RunLater внутри обычного потока, возможно это не самый оптимальный вариант, но свою работу выполняет.

→ Ссылка