无法捕获有关audioclip的异常

时间:2019-01-11 09:44:27

标签: java exception audio javafx exception-handling

我最近开始使用JavaFX,并且在audioclip和异常处理方面遇到了问题。

当我在音频系统出现问题的计算机上尝试运行时,抛出了异常。

引发异常

Exception in thread "Thread-4" com.sun.media.jfxmedia.MediaException: Could not create player!
    at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:274)
    at javafx.media/com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118)
    at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaAudioClipPlayer.play(NativeMediaAudioClipPlayer.java:319)
    at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaAudioClipPlayer.clipScheduler(NativeMediaAudioClipPlayer.java:112)
    at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaAudioClipPlayer.access$000(NativeMediaAudioClipPlayer.java:47)
    at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaAudioClipPlayer$Enthreaderator.lambda$static$0(NativeMediaAudioClipPlayer.java:85)
    at java.base/java.lang.Thread.run(Thread.java:844)

这是我的实现摘要

我还尝试了Throwable。但是我的代码出了点问题。

实施代码

try{
    audio = new AudioClip(new File("Ding.mp3").toURI().toString());
    audio.play();
    Thread.sleep(1000);
}catch(Exception e){
    System.out.println("can't play audio");
}

导入部分

import java.io.File;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.paint.*;
import javafx.scene.image.*;
import javafx.scene.effect.*;
import javafx.scene.text.*;
import javafx.scene.input.*;
import javafx.scene.canvas.*;
import javafx.scene.shape.*;
import javafx.scene.media.*;
import javafx.scene.media.AudioClip;
import javafx.stage.*;
import javafx.event.*;
import javafx.geometry.*;
import javafx.collections.*;
import java.util.*;
import java.net.MalformedURLException;
  

附注,这是我的整个代码https://github.com/yamakataoka/Pomodoro/blob/master/Pomodoro.java

你知道怎么抓吗?

1 个答案:

答案 0 :(得分:2)

您无法捕获此异常,因为它被抛出在另一个线程上,该线程处理媒体工作流程。

不幸的是,Java没有提供任何简单的方法来捕获此类异常。

您很有可能会遇到异常,因为JavaFX找不到您提供的文件。首先尝试使用URL来查看其是否正确:

AudioClip clickSound = new AudioClip("https://github.com/sgrinev/mastering-javafx-9-10-book/raw/master/resources/mouse-click.wav");

如果可行,请检查下一个有关JavaFX中正确的资源声明的问题的答案:How to target a file (a path to it) in Java/JavaFX

P.S .:如果您真正致力于捕获此异常,则可以深入研究下一个API:https://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)