/** thread run method that is called when the thread start method is called */
  @Override
  public void run() {
    for (; k < vecSequence.size(); k++) {
      // set it to say its not in this thread so the user cannot click on the
      // progress bar at the perfect time and freeze the program in the waiting
      // cursor stage
      if (k == (vecSequence.size() - 1)) {
        theApp.setThreadStatus(false);
        theApp.setPlayPauseOff();
      }

      if (((Component) theApp).getCursor().getType() == Cursor.WAIT_CURSOR) {
        int jpbIncrement = Math.round(1.0f * theApp.getBarMax() / vecSequence.size());
        k = Math.round(theApp.getBarValue() / jpbIncrement);

        ((Component) theApp).setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
      }

      AePlayWave thread = new AePlayWave(vecSequence.get(k));
      theApp.incrementProgressBarValue();

      thread.start(); // play the selected audio clip
      try {
        thread.join(); // wait for the thread playing to clip to die
      } catch (InterruptedException ie) {
        ((Component) theApp).setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
      }

      if (theApp.playPausePressed()) {
        k = vecSequence.size();
      }
    }
    if (!theApp.playPausePressed()) {
      theApp.setButtonsOutOfThread();
      theApp.fillBarValue();
    }
  }