public class com.googlecode.lanterna.gui2.SeparateTextGUIThread extends com.googlecode.lanterna.gui2.AbstractTextGUIThread implements com.googlecode.lanterna.gui2.AsynchronousTextGUIThread
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.googlecode.lanterna.gui2.SeparateTextGUIThread
  super_class: com.googlecode.lanterna.gui2.AbstractTextGUIThread
{
  private volatile com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State state;
    descriptor: Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private final java.lang.Thread textGUIThread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.concurrent.CountDownLatch waitLatch;
    descriptor: Ljava/util/concurrent/CountDownLatch;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private void <init>(com.googlecode.lanterna.gui2.TextGUI);
    descriptor: (Lcom/googlecode/lanterna/gui2/TextGUI;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
        start local 1 // com.googlecode.lanterna.gui2.TextGUI textGUI
         0: .line 51
            aload 0 /* this */
            aload 1 /* textGUI */
            invokespecial com.googlecode.lanterna.gui2.AbstractTextGUIThread.<init>:(Lcom/googlecode/lanterna/gui2/TextGUI;)V
         1: .line 52
            aload 0 /* this */
            new java.util.concurrent.CountDownLatch
            dup
            iconst_1
            invokespecial java.util.concurrent.CountDownLatch.<init>:(I)V
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.waitLatch:Ljava/util/concurrent/CountDownLatch;
         2: .line 53
            aload 0 /* this */
            new com.googlecode.lanterna.gui2.SeparateTextGUIThread$1
            dup
            aload 0 /* this */
            ldc "LanternaGUI"
            invokespecial com.googlecode.lanterna.gui2.SeparateTextGUIThread$1.<init>:(Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;Ljava/lang/String;)V
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUIThread:Ljava/lang/Thread;
         3: .line 59
            aload 0 /* this */
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.CREATED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
         4: .line 60
            return
        end local 1 // com.googlecode.lanterna.gui2.TextGUI textGUI
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;
            0    5     1  textGUI  Lcom/googlecode/lanterna/gui2/TextGUI;
    MethodParameters:
         Name  Flags
      textGUI  

  public void start();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 64
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUIThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
         1: .line 65
            aload 0 /* this */
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STARTED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
         2: .line 66
            return
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;

  public void stop();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 70
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STARTED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            if_acmpeq 2
         1: .line 71
            return
         2: .line 74
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STOPPING:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
         3: .line 75
            return
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;

  public void waitForStop();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 79
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.waitLatch:Ljava/util/concurrent/CountDownLatch;
            invokevirtual java.util.concurrent.CountDownLatch.await:()V
         1: .line 80
            return
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;
    Exceptions:
      throws java.lang.InterruptedException

  public void waitForStop(long, java.util.concurrent.TimeUnit);
    descriptor: (JLjava/util/concurrent/TimeUnit;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
        start local 1 // long time
        start local 3 // java.util.concurrent.TimeUnit unit
         0: .line 84
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.waitLatch:Ljava/util/concurrent/CountDownLatch;
            lload 1 /* time */
            aload 3 /* unit */
            invokevirtual java.util.concurrent.CountDownLatch.await:(JLjava/util/concurrent/TimeUnit;)Z
            pop
         1: .line 85
            return
        end local 3 // java.util.concurrent.TimeUnit unit
        end local 1 // long time
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;
            0    2     1  time  J
            0    2     3  unit  Ljava/util/concurrent/TimeUnit;
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      time  
      unit  

  public com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State getState();
    descriptor: ()Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 89
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            areturn
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;

  public java.lang.Thread getThread();
    descriptor: ()Ljava/lang/Thread;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 94
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUIThread:Ljava/lang/Thread;
            areturn
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;

  public void invokeLater(java.lang.Runnable);
    descriptor: (Ljava/lang/Runnable;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
        start local 1 // java.lang.Runnable runnable
         0: .line 99
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STARTED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            if_acmpeq 4
         1: .line 100
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Cannot schedule "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* runnable */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " for execution on the TextGUIThread "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         2: .line 101
            ldc "because the thread is in "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " state"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 100
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 103
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* runnable */
            invokespecial com.googlecode.lanterna.gui2.AbstractTextGUIThread.invokeLater:(Ljava/lang/Runnable;)V
         5: .line 104
            return
        end local 1 // java.lang.Runnable runnable
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;
            0    6     1  runnable  Ljava/lang/Runnable;
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
          Name  Flags
      runnable  

  private void mainGUILoop();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
         0: .line 110
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUI:Lcom/googlecode/lanterna/gui2/TextGUI;
            invokeinterface com.googlecode.lanterna.gui2.TextGUI.updateScreen:()V
         1: .line 111
            goto 29
         2: .line 112
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 1 /* e */
        start local 1 // java.io.IOException e
         3: .line 113
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.exceptionHandler:Lcom/googlecode/lanterna/gui2/TextGUIThread$ExceptionHandler;
            aload 1 /* e */
            invokeinterface com.googlecode.lanterna.gui2.TextGUIThread$ExceptionHandler.onIOException:(Ljava/io/IOException;)Z
            pop
        end local 1 // java.io.IOException e
         4: goto 29
         5: .line 115
      StackMap locals:
      StackMap stack: java.lang.RuntimeException
            astore 1 /* e */
        start local 1 // java.lang.RuntimeException e
         6: .line 116
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.exceptionHandler:Lcom/googlecode/lanterna/gui2/TextGUIThread$ExceptionHandler;
            aload 1 /* e */
            invokeinterface com.googlecode.lanterna.gui2.TextGUIThread$ExceptionHandler.onRuntimeException:(Ljava/lang/RuntimeException;)Z
            pop
        end local 1 // java.lang.RuntimeException e
         7: .line 118
            goto 29
         8: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.gui2.SeparateTextGUIThread.processEventsAndUpdate:()Z
            ifne 29
         9: .line 122
            lconst_1
            invokestatic java.lang.Thread.sleep:(J)V
        10: .line 123
            goto 29
        11: .line 124
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        12: .line 126
            goto 29
        13: .line 127
      StackMap locals:
      StackMap stack: java.io.EOFException
            pop
        14: .line 128
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.gui2.SeparateTextGUIThread.stop:()V
        15: .line 129
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUI:Lcom/googlecode/lanterna/gui2/TextGUI;
            instanceof com.googlecode.lanterna.gui2.WindowBasedTextGUI
            ifeq 35
        16: .line 131
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.textGUI:Lcom/googlecode/lanterna/gui2/TextGUI;
            checkcast com.googlecode.lanterna.gui2.WindowBasedTextGUI
            invokeinterface com.googlecode.lanterna.gui2.WindowBasedTextGUI.getWindows:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 19
      StackMap locals: com.googlecode.lanterna.gui2.SeparateTextGUIThread top java.util.Iterator
      StackMap stack:
        17: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.googlecode.lanterna.gui2.Window
            astore 1 /* window */
        start local 1 // com.googlecode.lanterna.gui2.Window window
        18: .line 132
            aload 1 /* window */
            invokeinterface com.googlecode.lanterna.gui2.Window.close:()V
        end local 1 // com.googlecode.lanterna.gui2.Window window
        19: .line 131
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 17
        20: .line 135
            goto 35
        21: .line 137
      StackMap locals: com.googlecode.lanterna.gui2.SeparateTextGUIThread
      StackMap stack: java.io.IOException
            astore 1 /* e */
        start local 1 // java.io.IOException e
        22: .line 138
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.exceptionHandler:Lcom/googlecode/lanterna/gui2/TextGUIThread$ExceptionHandler;
            aload 1 /* e */
            invokeinterface com.googlecode.lanterna.gui2.TextGUIThread$ExceptionHandler.onIOException:(Ljava/io/IOException;)Z
            ifeq 29
        23: .line 139
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.gui2.SeparateTextGUIThread.stop:()V
        24: .line 140
            goto 35
        end local 1 // java.io.IOException e
        25: .line 143
      StackMap locals:
      StackMap stack: java.lang.RuntimeException
            astore 1 /* e */
        start local 1 // java.lang.RuntimeException e
        26: .line 144
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.exceptionHandler:Lcom/googlecode/lanterna/gui2/TextGUIThread$ExceptionHandler;
            aload 1 /* e */
            invokeinterface com.googlecode.lanterna.gui2.TextGUIThread$ExceptionHandler.onRuntimeException:(Ljava/lang/RuntimeException;)Z
            ifeq 29
        27: .line 145
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.gui2.SeparateTextGUIThread.stop:()V
        28: .line 146
            goto 35
        end local 1 // java.lang.RuntimeException e
        29: .line 118
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STARTED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            if_acmpeq 8
        30: .line 150
            goto 35
        31: .line 151
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
        32: .line 152
            aload 0 /* this */
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STOPPED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
        33: .line 153
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.waitLatch:Ljava/util/concurrent/CountDownLatch;
            invokevirtual java.util.concurrent.CountDownLatch.countDown:()V
        34: .line 154
            aload 3
            athrow
        35: .line 152
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State.STOPPED:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
            putfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.state:Lcom/googlecode/lanterna/gui2/AsynchronousTextGUIThread$State;
        36: .line 153
            aload 0 /* this */
            getfield com.googlecode.lanterna.gui2.SeparateTextGUIThread.waitLatch:Ljava/util/concurrent/CountDownLatch;
            invokevirtual java.util.concurrent.CountDownLatch.countDown:()V
        37: .line 155
            return
        end local 0 // com.googlecode.lanterna.gui2.SeparateTextGUIThread this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   38     0    this  Lcom/googlecode/lanterna/gui2/SeparateTextGUIThread;
            3    4     1       e  Ljava/io/IOException;
            6    7     1       e  Ljava/lang/RuntimeException;
           18   19     1  window  Lcom/googlecode/lanterna/gui2/Window;
           22   25     1       e  Ljava/io/IOException;
           26   29     1       e  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.IOException
           0     1       5  Class java.lang.RuntimeException
           9    10      11  Class java.lang.InterruptedException
           8    12      13  Class java.io.EOFException
           8    12      21  Class java.io.IOException
           8    12      25  Class java.lang.RuntimeException
           0    31      31  any
}
SourceFile: "SeparateTextGUIThread.java"
NestMembers:
  com.googlecode.lanterna.gui2.SeparateTextGUIThread$1  com.googlecode.lanterna.gui2.SeparateTextGUIThread$Factory
InnerClasses:
  public final State = com.googlecode.lanterna.gui2.AsynchronousTextGUIThread$State of com.googlecode.lanterna.gui2.AsynchronousTextGUIThread
  com.googlecode.lanterna.gui2.SeparateTextGUIThread$1
  public Factory = com.googlecode.lanterna.gui2.SeparateTextGUIThread$Factory of com.googlecode.lanterna.gui2.SeparateTextGUIThread
  public abstract ExceptionHandler = com.googlecode.lanterna.gui2.TextGUIThread$ExceptionHandler of com.googlecode.lanterna.gui2.TextGUIThread