// constructor initializes LogoAnimatorJPanel by loading images
  public LogoAnimatorJPanel() {
    try {
      // get reference to FileOpenService
      FileOpenService fileOpenService =
          (FileOpenService) ServiceManager.lookup("javax.jnlp.FileOpenService");

      // display dialog that allows user to select multiple files
      FileContents[] contents = fileOpenService.openMultiFileDialog(null, null);

      // create array to store ImageIcon references
      images = new ImageIcon[contents.length];

      // load the selected images
      for (int count = 0; count < images.length; count++) {
        // create byte array to store an image's data
        byte[] imageData = new byte[(int) contents[count].getLength()];

        // get image's data and create image
        contents[count].getInputStream().read(imageData);
        images[count] = new ImageIcon(imageData);
      } // end for

      // this example assumes all images have the same width and height
      width = images[0].getIconWidth(); // get icon width
      height = images[0].getIconHeight(); // get icon height
    } // end try
    catch (Exception e) {
      e.printStackTrace();
    } // end catch
  } // end LogoAnimatorJPanel constructor