JavaFX: "Toolkit" no se inicializó al intentar reproducir un archivo mp3 a través de la clase MediaPlayer
media-player javafx-2 (4)
Intento hacer una simple reproducción de mp3 en el fondo de mi programa 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 programa 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.<init>(MediaPlayer.java:365)
at PokerApp.<init>(PokerApp.java:33)
at PokerApp.main(PokerApp.java:105)
¿Alguien tiene alguna idea según la causa del problema?
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.
ver http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl
com.sun.javafx.application.PlatformImpl.startup(()->{});
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 programa 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+)