JavaFX: “Toolkit” no se inicializó al intentar reproducir un archivo mp3 a través de la clase MediaPlayer

Intento hacer una simple reproducción de mp3 en el fondo de mi progtwig usando lo siguiente:

Media med = new Media(getClass().getResource("intro.mp3").toExternalForm()); MediaPlayer mPlayer = new MediaPlayer(med); mPlayer.play(); 

El archivo intro.mp3 se coloca en la carpeta bin de mi paquete, junto con los otros archivos .class.

El problema es que mi progtwig termina con:

 Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized 

El registro completo de finalización es:

 Device "Intel(R) HD Graphics Family" (\\.\DISPLAY1) initialization failed : WARNING: bad driver version detected, device disabled. Please update your driver to at least version 8.15.10.2302 Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:153) at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:148) at javafx.application.Platform.runLater(Platform.java:52) at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:450) at javafx.scene.media.MediaPlayer.(MediaPlayer.java:365) at PokerApp.(PokerApp.java:33) at PokerApp.main(PokerApp.java:105) 

¿Alguien tiene alguna idea según la causa del problema?

JavaFX realiza la inicialización “oculta” al inicio. La ejecución de MediaPlayer no desencadena la inicialización.

Las formas más fáciles de activarlo son:

  • have Application.launch() ejecutado
  • tener un progtwig basado en Application que se ejecuta desde un paquete empaquetado por tareas de fx ant (por ejemplo, creado a partir del proyecto JavaFX de Netbeans)
  • tener JFXPanel comenzado
  • llamar Platform.startup(Runnable) (Java 9+)

Para evitar la excepción de inicialización, debe invocar el método Application.launch () o simplemente crear una instancia de una nueva clase JFXPanel () (incluso si no se usa para nada). Esto iniciará JavaFxRuntime cuando se inicie la aplicación

Para crear una instancia de JFXPanel, agregue la siguiente línea en su código

  final JFXPanel fxPanel = new JFXPanel(); 

Importar siguiente paquete

 import javafx.embed.swing.JFXPanel; 

También hay forma de inicializar el kit de herramientas explícitamente, llamando a: com.sun.javafx.application.PlatformImpl#startup(Runnable)

Un poco hacky, debido al uso de * Impl, pero es útil, si no quieres usar Application o JXFPanel por alguna razón.