Не могу поймать исключение об аудиоклипе - PullRequest
0 голосов
/ 11 января 2019

Я недавно начал работать с JavaFX, и у меня возникла проблема с обработкой аудиоклипов и исключений.

Когда я пытался установить компьютер, на котором возникла проблема с аудиосистемой, возникло исключение.

Исключение :

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;

P.s это весь мой код https://github.com/yamakataoka/Pomodoro/blob/master/Pomodoro.java

Вы знаете, как его поймать?

1 Ответ

0 голосов
/ 11 января 2019

Вы не можете перехватить это исключение, потому что оно создается в другом потоке, который обрабатывает рабочий процесс мультимедиа.

К сожалению, Java не предоставляет каких-либо простых способов отловить такие исключения.

Вы получаете исключение, скорее всего, потому что JavaFX не может найти предоставленный вами файл. Попробуйте сначала с URL-адресом, чтобы увидеть, если это правда:

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

Если это работает, проверьте ответы следующего вопроса о правильном объявлении ресурсов в JavaFX: Как указать файл (путь к нему) в Java / JavaFX

P.S .: если вы действительно преданы ловле этого исключения, вы можете перейти к следующему API: https://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...