我最近开始使用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
你知道怎么抓吗?
答案 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)