code: public ActionFrames getActionFrames (
          CharacterDescriptor descrip, String action)
          throws NoSuchComponentException
      {
          Tuple<CharacterDescriptor, String> key = new Tuple<CharacterDescriptor, String>(descrip, action);
          ActionFrames frames = _actionFrames.get(key);
          if (frames == null) {
              // this doesn't actually composite the images, but prepares an
              // object to be able to do so
              frames = createCompositeFrames(descrip, action);
              _actionFrames.put(key, frames);
          }
  
          // periodically report our frame image cache performance
          if (!_cacheStatThrottle.throttleOp()) {
              long size = getEstimatedCacheMemoryUsage();
              int[] eff = _frameCache.getTrackedEffectiveness();
              log.debug("CharacterManager LRU [mem=" + (size / 1024) + "k" +
                        ", size=" + _frameCache.size() + ", hits=" + eff[0] +
                        ", misses=" + eff[1] + "].");
          }
  
          return frames;
      }
docs: Obtains the composited animation frames for the specified action for a
  character with the specified descriptor. The resulting composited
  animation will be cached.
  
  @exception NoSuchComponentException thrown if any of the components in
  the supplied descriptor do not exist.
  @exception IllegalArgumentException thrown if any of the components
  referenced in the descriptor do not support the specified action.