final class com.sun.media.sound.RealTimeSequencer$PlayThread implements java.lang.Runnable
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: com.sun.media.sound.RealTimeSequencer$PlayThread
super_class: java.lang.Object
{
private java.lang.Thread thread;
descriptor: Ljava/lang/Thread;
flags: (0x0002) ACC_PRIVATE
private final java.lang.Object lock;
descriptor: Ljava/lang/Object;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
boolean interrupted;
descriptor: Z
flags: (0x0000)
boolean isPumping;
descriptor: Z
flags: (0x0000)
private final com.sun.media.sound.RealTimeSequencer$DataPump dataPump;
descriptor: Lcom/sun/media/sound/RealTimeSequencer$DataPump;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
final com.sun.media.sound.RealTimeSequencer this$0;
descriptor: Lcom/sun/media/sound/RealTimeSequencer;
flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC
void <init>(com.sun.media.sound.RealTimeSequencer);
descriptor: (Lcom/sun/media/sound/RealTimeSequencer;)V
flags: (0x0000)
Code:
stack=6, locals=3, args_size=2
start local 0 0: aload 0
aload 1
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.lang.Object
dup
invokespecial java.lang.Object.<init>:()V
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
2: aload 0
iconst_0
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
3: aload 0
iconst_0
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.isPumping:Z
4: aload 0
new com.sun.media.sound.RealTimeSequencer$DataPump
dup
aload 1
invokespecial com.sun.media.sound.RealTimeSequencer$DataPump.<init>:(Lcom/sun/media/sound/RealTimeSequencer;)V
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
5: bipush 8
istore 2
start local 2 6: aload 0
aload 0
7: ldc "Java Sound Sequencer"
8: iconst_0
9: iload 2
10: iconst_1
11: invokestatic com.sun.media.sound.JSSecurityManager.createThread:(Ljava/lang/Runnable;Ljava/lang/String;ZIZ)Ljava/lang/Thread;
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.thread:Ljava/lang/Thread;
12: return
end local 2 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
6 13 2 priority I
MethodParameters:
Name Flags
this$0 final
com.sun.media.sound.RealTimeSequencer$DataPump getDataPump();
descriptor: ()Lcom/sun/media/sound/RealTimeSequencer$DataPump;
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
synchronized void setSequence(javax.sound.midi.Sequence);
descriptor: (Ljavax/sound/midi/Sequence;)V
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
aload 1
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.setSequence:(Ljavax/sound/midi/Sequence;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
0 2 1 seq Ljavax/sound/midi/Sequence;
MethodParameters:
Name Flags
seq
synchronized void start();
descriptor: ()V
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=4, locals=3, args_size=1
start local 0 0: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
iconst_1
putfield com.sun.media.sound.RealTimeSequencer.running:Z
1: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.hasCachedTempo:()Z
ifne 4
2: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
invokevirtual com.sun.media.sound.RealTimeSequencer.getTickPosition:()J
lstore 1
start local 1 3: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.tempoCache:Lcom/sun/media/sound/MidiUtils$TempoCache;
lload 1
invokevirtual com.sun.media.sound.MidiUtils$TempoCache.getTempoMPQAt:(J)F
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.setTempoMPQ:(F)V
end local 1 4: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
lconst_0
putfield com.sun.media.sound.RealTimeSequencer$DataPump.checkPointMillis:J
5: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.clearNoteOnCache:()V
6: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
iconst_1
putfield com.sun.media.sound.RealTimeSequencer$DataPump.needReindex:Z
7: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.resetLoopCount:()V
8: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
dup
astore 1
monitorenter
9: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
invokevirtual java.lang.Object.notifyAll:()V
10: aload 1
monitorexit
11: goto 14
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread java.lang.Object
StackMap stack: java.lang.Throwable
12: aload 1
monitorexit
13: athrow
14: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
3 4 1 tickPos J
Exception table:
from to target type
9 11 12 any
12 13 12 any
synchronized void stop();
descriptor: ()V
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=4, locals=4, args_size=1
start local 0 0: aload 0
invokevirtual com.sun.media.sound.RealTimeSequencer$PlayThread.playThreadImplStop:()V
1: invokestatic java.lang.System.nanoTime:()J
ldc 1000000
ldiv
lstore 1
start local 1 2: goto 13
3: StackMap locals: long
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
dup
astore 3
monitorenter
4: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
ldc 2000
invokevirtual java.lang.Object.wait:(J)V
5: goto 7
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread long java.lang.Object
StackMap stack: java.lang.InterruptedException
6: pop
7: StackMap locals:
StackMap stack:
aload 3
monitorexit
8: goto 11
StackMap locals:
StackMap stack: java.lang.Throwable
9: aload 3
monitorexit
10: athrow
11: StackMap locals:
StackMap stack:
invokestatic java.lang.System.nanoTime:()J
ldc 1000000
ldiv
lload 1
lsub
ldc 1900
lcmp
ifle 13
12: getstatic com.sun.media.sound.Printer.err:Z
ifeq 13
ldc "Waited more than 2 seconds in RealTimeSequencer.PlayThread.stop()!"
invokestatic com.sun.media.sound.Printer.err:(Ljava/lang/String;)V
13: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.isPumping:Z
ifne 3
14: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
2 15 1 t J
Exception table:
from to target type
4 5 6 Class java.lang.InterruptedException
4 8 9 any
9 10 9 any
void playThreadImplStop();
descriptor: ()V
flags: (0x0000)
Code:
stack=2, locals=2, args_size=1
start local 0 0: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
iconst_0
putfield com.sun.media.sound.RealTimeSequencer.running:Z
1: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
dup
astore 1
monitorenter
2: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
invokevirtual java.lang.Object.notifyAll:()V
3: aload 1
monitorexit
4: goto 7
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread java.lang.Object
StackMap stack: java.lang.Throwable
5: aload 1
monitorexit
6: athrow
7: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
Exception table:
from to target type
2 4 5 any
5 6 5 any
void close();
descriptor: ()V
flags: (0x0000)
Code:
stack=3, locals=3, args_size=1
start local 0 0: aconst_null
astore 1
start local 1 1: aload 0
dup
astore 2
monitorenter
2: aload 0
iconst_1
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
3: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.thread:Ljava/lang/Thread;
astore 1
4: aload 0
aconst_null
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.thread:Ljava/lang/Thread;
5: aload 2
monitorexit
6: goto 9
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread java.lang.Thread com.sun.media.sound.RealTimeSequencer$PlayThread
StackMap stack: java.lang.Throwable
7: aload 2
monitorexit
8: athrow
9: StackMap locals:
StackMap stack:
aload 1
ifnull 16
10: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
dup
astore 2
monitorenter
11: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
invokevirtual java.lang.Object.notifyAll:()V
12: aload 2
monitorexit
13: goto 16
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread java.lang.Thread java.lang.Object
StackMap stack: java.lang.Throwable
14: aload 2
monitorexit
15: athrow
16: StackMap locals:
StackMap stack:
aload 1
ifnull 20
17: aload 1
ldc 2000
invokevirtual java.lang.Thread.join:(J)V
18: goto 20
StackMap locals:
StackMap stack: java.lang.InterruptedException
19: pop
20: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 21 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
1 21 1 oldThread Ljava/lang/Thread;
Exception table:
from to target type
2 6 7 any
7 8 7 any
11 13 14 any
14 15 14 any
17 18 19 Class java.lang.InterruptedException
public void run();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=4, args_size=1
start local 0 0: goto 34
1: StackMap locals:
StackMap stack:
iconst_0
istore 1
start local 1 2: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.running:Z
istore 2
start local 2 3: aload 0
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
ifne 4
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.running:Z
ifeq 4
iconst_1
goto 5
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread int int
StackMap stack: com.sun.media.sound.RealTimeSequencer$PlayThread
4: iconst_0
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread int int
StackMap stack: com.sun.media.sound.RealTimeSequencer$PlayThread int
5: putfield com.sun.media.sound.RealTimeSequencer$PlayThread.isPumping:Z
6: goto 11
7: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.pump:()Z
istore 1
8: lconst_1
invokestatic java.lang.Thread.sleep:(J)V
9: goto 11
StackMap locals:
StackMap stack: java.lang.InterruptedException
10: pop
11: StackMap locals:
StackMap stack:
iload 1
ifne 12
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
ifne 12
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.running:Z
ifne 7
12: StackMap locals:
StackMap stack:
aload 0
invokevirtual com.sun.media.sound.RealTimeSequencer$PlayThread.playThreadImplStop:()V
13: iload 2
ifeq 15
14: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
iconst_1
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.notesOff:(Z)V
15: StackMap locals:
StackMap stack:
iload 1
ifeq 22
16: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.dataPump:Lcom/sun/media/sound/RealTimeSequencer$DataPump;
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.sequence:Ljavax/sound/midi/Sequence;
invokevirtual javax.sound.midi.Sequence.getTickLength:()J
invokevirtual com.sun.media.sound.RealTimeSequencer$DataPump.setTickPos:(J)V
17: new javax.sound.midi.MetaMessage
dup
invokespecial javax.sound.midi.MetaMessage.<init>:()V
astore 3
start local 3 18: aload 3
bipush 47
iconst_0
newarray 8
iconst_0
invokevirtual javax.sound.midi.MetaMessage.setMessage:(I[BI)V
19: goto 21
StackMap locals: com.sun.media.sound.RealTimeSequencer$PlayThread int int javax.sound.midi.MetaMessage
StackMap stack: javax.sound.midi.InvalidMidiDataException
20: pop
21: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
aload 3
invokevirtual com.sun.media.sound.RealTimeSequencer.sendMetaEvents:(Ljavax/sound/midi/MidiMessage;)V
end local 3 22: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
dup
astore 3
monitorenter
23: aload 0
iconst_0
putfield com.sun.media.sound.RealTimeSequencer$PlayThread.isPumping:Z
24: aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
invokevirtual java.lang.Object.notifyAll:()V
25: goto 29
26: StackMap locals: java.lang.Object
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.lock:Ljava/lang/Object;
invokevirtual java.lang.Object.wait:()V
27: goto 29
StackMap locals:
StackMap stack: java.lang.Exception
28: pop
29: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.this$0:Lcom/sun/media/sound/RealTimeSequencer;
getfield com.sun.media.sound.RealTimeSequencer.running:Z
ifne 30
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
ifeq 26
30: StackMap locals:
StackMap stack:
aload 3
monitorexit
31: goto 34
StackMap locals:
StackMap stack: java.lang.Throwable
32: aload 3
monitorexit
33: athrow
end local 2 end local 1 34: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.media.sound.RealTimeSequencer$PlayThread.interrupted:Z
ifeq 1
35: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 36 0 this Lcom/sun/media/sound/RealTimeSequencer$PlayThread;
2 34 1 EOM Z
3 34 2 wasRunning Z
18 22 3 message Ljavax/sound/midi/MetaMessage;
Exception table:
from to target type
8 9 10 Class java.lang.InterruptedException
18 19 20 Class javax.sound.midi.InvalidMidiDataException
26 27 28 Class java.lang.Exception
23 31 32 any
32 33 32 any
}
SourceFile: "RealTimeSequencer.java"
NestHost: com.sun.media.sound.RealTimeSequencer
InnerClasses:
public final TempoCache = com.sun.media.sound.MidiUtils$TempoCache of com.sun.media.sound.MidiUtils
private DataPump = com.sun.media.sound.RealTimeSequencer$DataPump of com.sun.media.sound.RealTimeSequencer
final PlayThread = com.sun.media.sound.RealTimeSequencer$PlayThread of com.sun.media.sound.RealTimeSequencer