private void requestRefresh(@Nullable Component c) {
    if (c == null || requested.contains(c) || !canRefresh(c)) {
      return;
    }

    Frame frame = getFrames()[index];
    int delay = frame.getDelay();
    if (delay > 0) {
      requested.add(c);
      EdtScheduledExecutorService.getInstance().schedule(() -> {
        requested.remove(c);
        if (canRefresh(c)) {
          doRefresh(c);
        }
      }, delay, TimeUnit.MILLISECONDS);
    }
    else {
      doRefresh(c);
    }
  }
private void requestRefresh(@Nullable Component c)