RFR: 8279673: AudioClip.play doesn't work due to NullPointerException when creating DataPusher
Andrey Turbanov
duke at openjdk.java.net
Mon Jan 10 11:06:12 UTC 2022
On Tue, 16 Nov 2021 02:46:45 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
>> There is possible NPE, when trying to play AudioClip
>>
>> import java.applet.AudioClip;
>> import java.io.IOException;
>> import java.net.URL;
>>
>>
>> public class AudioNpe {
>> public static void main(String[] args) throws IOException, InterruptedException {
>> URL url = new URL("https://file-examples-com.github.io/uploads/2017/11/file_example_WAV_1MG.wav");
>> AudioClip content = (AudioClip)url.getContent();
>> content.play();
>>
>> Thread.sleep(10000L);
>> }
>> }
>>
>>
>> at java.lang.Thread.<init>(Thread.java:393)
>> at java.lang.Thread.<init>(Thread.java:760)
>> at com.sun.media.sound.JSSecurityManager.createThread(JSSecurityManager.java:115)
>> at com.sun.media.sound.DataPusher.start(DataPusher.java:117)
>> - locked <0x955> (a com.sun.media.sound.DataPusher)
>> at com.sun.media.sound.JavaSoundAudioClip.startImpl(JavaSoundAudioClip.java:202)
>> - locked <0x95e> (a com.sun.media.sound.JavaSoundAudioClip)
>> at com.sun.media.sound.JavaSoundAudioClip.play(JavaSoundAudioClip.java:152)
>> at main.java.AudioNpe.main(AudioNpe.java:12)
>>
>>
>> It happens because of bug in `com.sun.media.sound.JSSecurityManager#createThread` implementation: variable `String name`, which supposed to be used - actually unused and `null` thread name is passed to `Thread` constructor.
>>
>> After fix - audio clip plays without problems.
>
> src/java.desktop/share/classes/com/sun/media/sound/JSSecurityManager.java line 115:
>
>> 113: final boolean doStart)
>> 114: {
>> 115: String name = (threadName != null) ? threadName : "JSSM Thread";
>
> Probably it will be better to leave this check as is, and just use the "name" var as a parameter to the new Thread, so it will prevent any similar issues in the future.
It's a good practice to always set meaningful thread name. I think this package-private API is not supposed to be widely used. And fact that it was unnoticed for long time, gives very small chance that this method will be used in future code.
I would like to remove such _redundant_ code.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6382
More information about the client-libs-dev
mailing list