final class com.sun.media.sound.MidiInDevice extends com.sun.media.sound.AbstractMidiDevice implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.media.sound.MidiInDevice
  super_class: com.sun.media.sound.AbstractMidiDevice
{
  private volatile java.lang.Thread midiInThread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  void <init>(com.sun.media.sound.AbstractMidiDeviceProvider$Info);
    descriptor: (Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.media.sound.MidiInDevice this
        start local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info info
         0: .line 43
            aload 0 /* this */
            aload 1 /* info */
            invokespecial com.sun.media.sound.AbstractMidiDevice.<init>:(Ljavax/sound/midi/MidiDevice$Info;)V
         1: .line 45
            return
        end local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info info
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/media/sound/MidiInDevice;
            0    2     1  info  Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
    MethodParameters:
      Name  Flags
      info  

  protected synchronized void implOpen();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 53
            aload 0 /* this */
            invokevirtual com.sun.media.sound.MidiInDevice.getDeviceInfo:()Ljavax/sound/midi/MidiDevice$Info;
            checkcast com.sun.media.sound.MidiInDeviceProvider$MidiInDeviceInfo
            invokevirtual com.sun.media.sound.MidiInDeviceProvider$MidiInDeviceInfo.getIndex:()I
            istore 1 /* index */
        start local 1 // int index
         1: .line 54
            aload 0 /* this */
            aload 0 /* this */
            iload 1 /* index */
            invokevirtual com.sun.media.sound.MidiInDevice.nOpen:(I)J
            putfield com.sun.media.sound.MidiInDevice.id:J
         2: .line 56
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lconst_0
            lcmp
            ifne 4
         3: .line 57
            new javax.sound.midi.MidiUnavailableException
            dup
            ldc "Unable to open native device"
            invokespecial javax.sound.midi.MidiUnavailableException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 61
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.midiInThread:Ljava/lang/Thread;
            ifnonnull 11
         5: .line 62
            aload 0 /* this */
            aload 0 /* this */
         6: .line 63
            ldc "Java Sound MidiInDevice Thread"
         7: .line 64
            iconst_0
         8: .line 65
            iconst_m1
         9: .line 66
            iconst_1
        10: .line 62
            invokestatic com.sun.media.sound.JSSecurityManager.createThread:(Ljava/lang/Runnable;Ljava/lang/String;ZIZ)Ljava/lang/Thread;
            putfield com.sun.media.sound.MidiInDevice.midiInThread:Ljava/lang/Thread;
        11: .line 69
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            invokevirtual com.sun.media.sound.MidiInDevice.nStart:(J)V
        12: .line 71
            return
        end local 1 // int index
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   13     0   this  Lcom/sun/media/sound/MidiInDevice;
            1   13     1  index  I
    Exceptions:
      throws javax.sound.midi.MidiUnavailableException

  protected synchronized void implClose();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 78
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lstore 1 /* oldId */
        start local 1 // long oldId
         1: .line 79
            aload 0 /* this */
            lconst_0
            putfield com.sun.media.sound.MidiInDevice.id:J
         2: .line 81
            aload 0 /* this */
            invokespecial com.sun.media.sound.AbstractMidiDevice.implClose:()V
         3: .line 84
            aload 0 /* this */
            lload 1 /* oldId */
            invokevirtual com.sun.media.sound.MidiInDevice.nStop:(J)V
         4: .line 85
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.midiInThread:Ljava/lang/Thread;
            ifnull 8
         5: .line 87
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.midiInThread:Ljava/lang/Thread;
            ldc 1000
            invokevirtual java.lang.Thread.join:(J)V
         6: .line 88
            goto 8
      StackMap locals: com.sun.media.sound.MidiInDevice long
      StackMap stack: java.lang.InterruptedException
         7: pop
         8: .line 92
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            lload 1 /* oldId */
            invokevirtual com.sun.media.sound.MidiInDevice.nClose:(J)V
         9: .line 94
            return
        end local 1 // long oldId
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   10     0   this  Lcom/sun/media/sound/MidiInDevice;
            1   10     1  oldId  J
      Exception table:
        from    to  target  type
           5     6       7  Class java.lang.InterruptedException

  public long getMicrosecondPosition();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 98
            ldc -1
            lstore 1 /* timestamp */
        start local 1 // long timestamp
         1: .line 99
            aload 0 /* this */
            invokevirtual com.sun.media.sound.MidiInDevice.isOpen:()Z
            ifeq 3
         2: .line 100
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            invokevirtual com.sun.media.sound.MidiInDevice.nGetTimeStamp:(J)J
            lstore 1 /* timestamp */
         3: .line 102
      StackMap locals: long
      StackMap stack:
            lload 1 /* timestamp */
            lreturn
        end local 1 // long timestamp
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lcom/sun/media/sound/MidiInDevice;
            1    4     1  timestamp  J

  protected boolean hasTransmitters();
    descriptor: ()Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 109
            iconst_1
            ireturn
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/MidiInDevice;

  protected javax.sound.midi.Transmitter createTransmitter();
    descriptor: ()Ljavax/sound/midi/Transmitter;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 114
            new com.sun.media.sound.MidiInDevice$MidiInTransmitter
            dup
            aload 0 /* this */
            invokespecial com.sun.media.sound.MidiInDevice$MidiInTransmitter.<init>:(Lcom/sun/media/sound/MidiInDevice;)V
            areturn
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/MidiInDevice;

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.sun.media.sound.MidiInDevice this
         0: .line 131
            goto 6
         1: .line 133
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            invokevirtual com.sun.media.sound.MidiInDevice.nGetMessages:(J)V
         2: .line 134
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lconst_0
            lcmp
            ifeq 6
         3: .line 136
            lconst_1
            invokestatic java.lang.Thread.sleep:(J)V
         4: .line 137
            goto 6
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         5: pop
         6: .line 131
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lconst_0
            lcmp
            ifne 1
         7: .line 142
            aload 0 /* this */
            aconst_null
            putfield com.sun.media.sound.MidiInDevice.midiInThread:Ljava/lang/Thread;
         8: .line 143
            return
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lcom/sun/media/sound/MidiInDevice;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.InterruptedException

  void callbackShortMessage(int, long);
    descriptor: (IJ)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.sun.media.sound.MidiInDevice this
        start local 1 // int packedMsg
        start local 2 // long timeStamp
         0: .line 151
            iload 1 /* packedMsg */
            ifeq 1
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lconst_0
            lcmp
            ifne 2
         1: .line 152
      StackMap locals:
      StackMap stack:
            return
         2: .line 162
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.MidiInDevice.getTransmitterList:()Lcom/sun/media/sound/AbstractMidiDevice$TransmitterList;
            iload 1 /* packedMsg */
            lload 2 /* timeStamp */
            invokevirtual com.sun.media.sound.AbstractMidiDevice$TransmitterList.sendMessage:(IJ)V
         3: .line 163
            return
        end local 2 // long timeStamp
        end local 1 // int packedMsg
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lcom/sun/media/sound/MidiInDevice;
            0    4     1  packedMsg  I
            0    4     2  timeStamp  J
    MethodParameters:
           Name  Flags
      packedMsg  
      timeStamp  

  void callbackLongMessage(byte[], long);
    descriptor: ([BJ)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.sun.media.sound.MidiInDevice this
        start local 1 // byte[] data
        start local 2 // long timeStamp
         0: .line 166
            aload 0 /* this */
            getfield com.sun.media.sound.MidiInDevice.id:J
            lconst_0
            lcmp
            ifeq 1
            aload 1 /* data */
            ifnonnull 2
         1: .line 167
      StackMap locals:
      StackMap stack:
            return
         2: .line 169
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.MidiInDevice.getTransmitterList:()Lcom/sun/media/sound/AbstractMidiDevice$TransmitterList;
            aload 1 /* data */
            lload 2 /* timeStamp */
            invokevirtual com.sun.media.sound.AbstractMidiDevice$TransmitterList.sendMessage:([BJ)V
         3: .line 170
            return
        end local 2 // long timeStamp
        end local 1 // byte[] data
        end local 0 // com.sun.media.sound.MidiInDevice this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lcom/sun/media/sound/MidiInDevice;
            0    4     1       data  [B
            0    4     2  timeStamp  J
    MethodParameters:
           Name  Flags
      data       
      timeStamp  

  private native long nOpen(int);
    descriptor: (I)J
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    Exceptions:
      throws javax.sound.midi.MidiUnavailableException
    MethodParameters:
       Name  Flags
      index  

  private native void nClose(long);
    descriptor: (J)V
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
      Name  Flags
      id    

  private native void nStart(long);
    descriptor: (J)V
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    Exceptions:
      throws javax.sound.midi.MidiUnavailableException
    MethodParameters:
      Name  Flags
      id    

  private native void nStop(long);
    descriptor: (J)V
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
      Name  Flags
      id    

  private native long nGetTimeStamp(long);
    descriptor: (J)J
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
      Name  Flags
      id    

  private native void nGetMessages(long);
    descriptor: (J)V
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
      Name  Flags
      id    
}
SourceFile: "MidiInDevice.java"
NestMembers:
  com.sun.media.sound.MidiInDevice$MidiInTransmitter
InnerClasses:
  final TransmitterList = com.sun.media.sound.AbstractMidiDevice$TransmitterList of com.sun.media.sound.AbstractMidiDevice
  Info = com.sun.media.sound.AbstractMidiDeviceProvider$Info of com.sun.media.sound.AbstractMidiDeviceProvider
  private final MidiInTransmitter = com.sun.media.sound.MidiInDevice$MidiInTransmitter of com.sun.media.sound.MidiInDevice
  final MidiInDeviceInfo = com.sun.media.sound.MidiInDeviceProvider$MidiInDeviceInfo of com.sun.media.sound.MidiInDeviceProvider
  public Info = javax.sound.midi.MidiDevice$Info of javax.sound.midi.MidiDevice