void (final @NotNull Factory<? extends InputStream> streamProducer) { // The wrapper thread is unnecessary, unless it blocks on the // Clip finishing; see comments. new Thread(() -> { try { Clip clip = AudioSystem.getClip(); InputStream stream = streamProducer.create(); if (!stream.markSupported()) stream = new BufferedInputStream(stream); AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream); clip.open(inputStream); clip.start(); } catch (Exception e) { getLogger().info(e); } }, "play sound").start(); }