private void extract() {
    File psuFile = new File(openField.getText());
    if (!RecordReaderFactory.isSupportedVersion(psuFile)) {
      showErrorDialog(getString("E_VERSION"));
      return;
    }

    switch (save.showSaveDialog(frame)) {
    case JFileChooser.CANCEL_OPTION:
      return;
    case JFileChooser.ERROR_OPTION:
      showErrorDialog(getString("E_SAVE_FILE"));
      return;
    }
    String path = save.getSelectedFile().getAbsolutePath();
    File documentFile = new File(ensureExtension(path, ".html"));
    if (documentFile.exists()) {
      int r = showConfirmDialog(frame, getString("M_OVERWRITE"),
          getString("T_OVERWRITE"), OK_CANCEL_OPTION);
      if (r == CANCEL_OPTION)
        return;
    }

    try {
      List<PlayMode> selected = new ArrayList<PlayMode>();
      for (PlayMode mode : PlayMode.values())
        if (playModeBoxes.get(mode).isSelected())
          selected.add(mode);
      recordExtractor.setExcludeNoClear(excludeNoClearBox.isSelected());
      recordExtractor.setSortSeparately(separateButton.isSelected());
      boolean r = recordExtractor.extract(psuFile, documentFile, selected); 
      if (!r)
        showErrorDialog(getString("E_NO_RECORDS"));
    } catch (Exception e) {
      e.printStackTrace();
      showErrorDialog(getString("E_FAILED"));
      return;
    }
  }