/** 艦隊が出撃中で大破した場合に警告を行います */
    private void postFatal(List<ShipDto> badlyDamaged) {
      if (badlyDamaged.size() > 0) {
        if (AppConfig.get().isBalloonBybadlyDamage()) {
          StringBuilder sb = new StringBuilder();
          sb.append(AppConstants.MESSAGE_STOP_SORTIE);
          sb.append("\n");
          for (ShipDto shipDto : badlyDamaged) {
            sb.append(shipDto.getName());
            sb.append("(" + shipDto.getLv() + ")");
            sb.append(" : ");
            List<ItemInfoDto> items = shipDto.getItem();
            List<String> names = new ArrayList<String>();
            for (ItemInfoDto itemDto : items) {
              if (itemDto != null) {
                names.add(itemDto.getName());
              }
            }
            sb.append(StringUtils.join(names, ","));
            sb.append("\n");
          }
          ToolTip tip = new ToolTip(this.main.getShell(), SWT.BALLOON | SWT.ICON_ERROR);
          tip.setText("大破警告");
          tip.setMessage(sb.toString());

          this.main.getTrayItem().setToolTip(tip);
          tip.setVisible(true);
        }
        // 大破時にサウンドを再生する
        Sound.randomBadlySoundPlay();
      }
    }
    @Override
    public void run() {
      if (this.main.getShell().isDisposed()) {
        return;
      }
      // 現在時刻
      boolean visibleHome = false;
      // 遠征を更新する
      this.updateDeck();
      // 入渠を更新する
      this.updateNdock();
      // その他の時間を更新
      this.updateOtherTimer();

      // 遠征通知
      if (this.noticeMission.size() > 0) {
        Sound.randomExpeditionSoundPlay();
        visibleHome |= AppConfig.get().isVisibleOnReturnMission();

        // Push通知 遠征
        if (AppConfig.get().getPushMission()) {
          PushNotify.add(
              StringUtils.join(this.noticeMission, "\r\n"),
              "遠征",
              AppConfig.get().getPushPriorityMission());
        }
      }

      // 入渠通知
      if (this.noticeNdock.size() > 0) {
        Sound.randomDockSoundPlay();
        visibleHome |= AppConfig.get().isVisibleOnReturnBathwater();

        // Push通知 入渠
        if (AppConfig.get().getPushNdock()) {
          PushNotify.add(
              StringUtils.join(this.noticeNdock, "\r\n"),
              "入渠",
              AppConfig.get().getPushPriorityNdock());
        }
      }

      // 疲労回復通知
      if (this.noticeCond.size() > 0) {
        Sound.randomCondSoundPlay();

        // Push通知 疲労回復
        if (AppConfig.get().isPushCond()) {
          PushNotify.add(
              StringUtils.join(this.noticeCond, "\r\n"),
              "疲労回復",
              AppConfig.get().getPushPriorityCond());
        }
      }

      // 泊地修理通知
      if (this.noticeAkashi.size() > 0) {
        Sound.randomAkashiSoundPlay();

        // Push通知 泊地修理
        if (AppConfig.get().isPushAkashi()) {
          PushNotify.add(
              StringUtils.join(this.noticeAkashi, "\r\n"),
              "泊地修理",
              AppConfig.get().getPushPriorityAkashi());
        }
      }

      if (visibleHome) {
        this.main.getTabFolder().setSelection(0);
      }

      if (AppConfig.get().isUseBalloon()) {
        // バルーンツールチップを表示する
        try {
          // 遠征・入渠のお知らせ
          List<String> title = new ArrayList<String>();
          List<String> notice = new ArrayList<String>();
          this.addNotice(notice, title, this.noticeMission, "遠征");
          this.addNotice(notice, title, this.noticeNdock, "入渠");
          this.addNotice(notice, title, this.noticeCond, "疲労回復");
          this.addNotice(notice, title, this.noticeAkashi, "泊地修理");
          if (notice.size() > 0) {
            ToolTip tip = new ToolTip(this.main.getShell(), SWT.BALLOON | SWT.ICON_INFORMATION);
            tip.setText(StringUtils.join(title, "・"));
            tip.setMessage(StringUtils.join(notice, "\r\n"));
            this.main.getTrayItem().setToolTip(tip);
            tip.setVisible(true);
          }
        } catch (Exception e) {
          LOG.get().warn("お知らせの表示に失敗しました", e);
        }
      }

      // エラー表示を更新(入渠遠征とは関係ないけど)
      this.updateErrorLabel();
    }