75 public static final AudioPlayer player = getAudioPlayer(); 76 77 private static ThreadGroup getAudioThreadGroup() { 78 79 if(DEBUG) { System.out.println("AudioPlayer.getAudioThreadGroup()"); } 80 ThreadGroup g = currentThread().getThreadGroup(); 81 while ((g.getParent() != null) && 82 (g.getParent().getParent() != null)) { 83 g = g.getParent(); 84 } 85 return g; 86 } 87 88 /** 89 * Create an AudioPlayer thread in a privileged block. 90 */ 91 92 private static AudioPlayer getAudioPlayer() { 93 94 if(DEBUG) { System.out.println("> AudioPlayer.getAudioPlayer()"); } 95 AudioPlayer audioPlayer; 96 PrivilegedAction action = new PrivilegedAction() { 97 public Object run() { 98 Thread t = new AudioPlayer(); 99 t.setPriority(MAX_PRIORITY); 100 t.setDaemon(true); 101 t.start(); 102 return t; 103 } 104 }; 105 audioPlayer = (AudioPlayer) AccessController.doPrivileged(action); 106 return audioPlayer; 107 } 108 109 /** 110 * Construct an AudioPlayer. 111 */ 112 private AudioPlayer() { 113 114 super(getAudioThreadGroup(), "Audio Player"); 115 if(DEBUG) { System.out.println("> AudioPlayer private constructor"); } 116 devAudio = AudioDevice.device; 117 devAudio.open(); 118 if(DEBUG) { System.out.println("< AudioPlayer private constructor completed"); } 119 } 120 121 122 /** 123 * Start playing a stream. The stream will continue to play 124 * until the stream runs out of data, or it is stopped. 125 * @see AudioPlayer#stop 126 */ | 75 public static final AudioPlayer player = getAudioPlayer(); 76 77 private static ThreadGroup getAudioThreadGroup() { 78 79 if(DEBUG) { System.out.println("AudioPlayer.getAudioThreadGroup()"); } 80 ThreadGroup g = currentThread().getThreadGroup(); 81 while ((g.getParent() != null) && 82 (g.getParent().getParent() != null)) { 83 g = g.getParent(); 84 } 85 return g; 86 } 87 88 /** 89 * Create an AudioPlayer thread in a privileged block. 90 */ 91 92 private static AudioPlayer getAudioPlayer() { 93 94 if(DEBUG) { System.out.println("> AudioPlayer.getAudioPlayer()"); } 95 PrivilegedAction<AudioPlayer> action = new PrivilegedAction<AudioPlayer>() { 96 public AudioPlayer run() { 97 AudioPlayer t = new AudioPlayer(); 98 t.setPriority(MAX_PRIORITY); 99 t.setDaemon(true); 100 t.start(); 101 return t; 102 } 103 }; 104 return AccessController.doPrivileged(action); 105 } 106 107 /** 108 * Construct an AudioPlayer. 109 */ 110 private AudioPlayer() { 111 112 super(getAudioThreadGroup(), "Audio Player"); 113 if(DEBUG) { System.out.println("> AudioPlayer private constructor"); } 114 devAudio = AudioDevice.device; 115 devAudio.open(); 116 if(DEBUG) { System.out.println("< AudioPlayer private constructor completed"); } 117 } 118 119 120 /** 121 * Start playing a stream. The stream will continue to play 122 * until the stream runs out of data, or it is stopped. 123 * @see AudioPlayer#stop 124 */ |