docs: public final void open() {
          if (firstTime) {
              firstTime = false;
              if (SwingUtilities.isEventDispatchThread()) {
                  openIntern();
              } else {
                  try {
                      SwingUtilities.invokeAndWait(new Runnable() {
                          public void run() {
                              openIntern();
                          }
                      });
                  } catch (final Exception ex) {
                      ignore();
                  }
              }
          } else {
              throw new IllegalStateException("This object cannot be reused!");
          }
      }