public static void main(String[] args) throws IOException {
    File[] files;
    Set<String> keyFilters = new HashSet<>();
    boolean areGemfireLogs = false;
    if (args.length > 0) {
      ArrayList<File> fileList = new ArrayList<>();
      for (int i = 0; i < args.length; i++) {
        String arg = args[i];
        if (arg.equals("-filterkey")) {
          keyFilters.add(args[i + 1]);
          i++;
        } else if (arg.equals("-logs")) {
          areGemfireLogs = true;
        } else {
          fileList.add(new File(args[i]));
        }

      }
      files = fileList.toArray(new File[0]);
    } else {
      System.err.println("Usage: java -jar sequence.jar (-logs) (-filterkey key)* <file>+\n\n"
          + "\t-logs (expiremental) instead of using .graph files, parse the gemfire logs to generate the sequence display"
          + "\t-filterkey a java regular expression to match against key names. If specified\n"
          + "The list of key sequence diagrams will only contain matching keys");
      ExitCode.FATAL.doSystemExit();
      return;
    }

    final GraphSet graphs;

    graphs = getGraphs(areGemfireLogs, keyFilters, files);

    final LineMapper lineMapper = getLineMapper(files);
    final GemfireSequenceDisplay display = new GemfireSequenceDisplay();
    // Schedule a job for the event-dispatching thread:
    // creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(() -> display.createAndShowGUI(graphs, lineMapper));
  }
Create the GUI and show it. For thread safety, this method should be invoked from the
event-dispatching thread.
geode-core/src/test/java/org/apache/geode/sequence/GemfireSequenceDisplay.java