Потоки и JOptionPane против немодального JDialog
Я написал метод, который воспроизводит аудиоклип, пока отображается JOptionPane.
private synchronized void playSound(final String path_) {
new Thread(new Runnable() {
public void run() {
try {
Clip clip = AudioSystem.getClip();
BufferedInputStream bufferedIn=new BufferedInputStream(this.getClass().getClassLoader().getResourceAsStream(resourcesPath+path_));
AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedIn);
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
while (runThread) {
Thread.sleep(5000);
}
clip.stop();
}
catch (Exception e) {
System.err.println("Audio clip ("+resourcesPath+path_+") error: "+e.getMessage());
e.printStackTrace();
}
}
}).start();
Я вызываю этот метод непосредственно перед вызовом метода JOPtionPane.
public void timerAlert(String text_) {
runThread=true;
playSound(sounds.get("Alarm"));
JOptionPane.showMessageDialog(GUI.getInstance().getFrame(),text_);
runThread=false;
}
Это работает просто отлично. Тем не менее, я также хочу сделать то же самое, когда я отображаю немодальный JDialog. Я делаю то же самое, но клип не будет воспроизводиться.
public void alert(TimelineRecord timeline_) {
runThread=true;
playSound(sounds.get("Alarm"));
new AlertDialog(timeline_.eventText,timeline_);
runThread=false;
}
Я предполагаю, что немодальный JDialog не является на самом деле неблокирующим, поскольку я интерпретирую документацию. По крайней мере, похоже, что JDialog блокирует звуковую нить. В чем разница между JOptionPane и немодальным JDialog в том, что касается блокировки других потоков? ТИА.