В приложении Java swing предполагается, что следующий фрагмент будет играть сирену. Он запускается нормально, но останавливается преждевременно, не всегда в одно и то же время (то есть иногда он останавливается почти сразу, а иногда и после более длительной задержки, но обычно он не заканчивает воспроизведение всего звукового файла). Что может быть причиной этого?Воспроизведение звука в режиме Java заканчивается досрочно
Я сделал все возможное, чтобы создать минимальный пример, который до сих пор имеет проблемы:
package monster;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example_2 extends JPanel {
protected static final long serialVersionUID = 1L;
public Example_2() {
setPreferredSize(new Dimension(100,100));
setBackground(Color.white);
createPanel();
}
public static void main(String[] args) {
Example_2 e = new Example_2();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(e, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
f.repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
new Thread(
new Runnable() {
public void run() {
try {
File f = new File("sound/siren_short.wav");
String url = "file:///"+f.getAbsolutePath().replaceAll("\\\\","/").replaceAll(" ", "%20");
MediaPlayer mp = new MediaPlayer(new Media(url));
mp.play();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public static JFXPanel createPanel() {
return new JFXPanel();
}
}
Возможно, jvm помещает медиа-поток в режим сна, прежде чем он будет сделан, потому что у него есть что-то более важное. Я надеюсь, что это решение голода в мире ... Вы пытались запустить это в отладчике, чтобы узнать, к какой теме переключается ваше приложение? – Foosh
Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Self Содержащийся, правильный пример). –
Закрывает ли все приложение Swing? Или он продолжает работать, пока звуковой файл перестает играть? Кроме того, является ли ваш новый поток демоном или нет? –