public void run() {
    Object arr[] = {this, target};
    try {
      // wait untill destroy after war launch
      sleep(delayFromStart * War.TIME_INTERVAL);
      synchronized (destructor) {
        try {
          for (WarEventListener l : allListeners) {
            l.addedLauncherToDestroy(destructor.getDestructorId(), target.getLauncherId(),
                super.getDelayBeforeLaunch());
          }
          for (int time = 0; time <= super.getDelayBeforeLaunch(); time++) {
            Thread.sleep(War.TIME_INTERVAL);
            for (WarEventListener l : allListeners) {
              l.UpdatedMissileProgressToModelEvent(time, target.getLauncherId(),
                  "launcherDestroyer",
                  (destructor.getType() + " #" + destructor.getDestructorId()), 0,
                  super.getDelayBeforeLaunch());
            }
          }
          for (WarEventListener l : allListeners) {
            l.RemoveCurrentElement(target.getLauncherId());
          }
        } catch (InterruptedException e) {
        }

        // synchronized (destructor) {
        logDestroyingLauncher();
        destroyTarget(); // try to destroy launcher
      }
    } catch (Exception e) {
    }
  }