J'essaie de faire une lecture mp3 simple en arrière-plan de mon programme en utilisant ce qui suit:
Media med = new Media(getClass().getResource("intro.mp3").toExternalForm());
MediaPlayer mPlayer = new MediaPlayer(med);
mPlayer.play();
Le fichier intro.mp3 est placé dans le dossier bin de mon package, avec les autres fichiers .class.
Le problème est que mon programme se termine avec:
Exception in thread "main" Java.lang.IllegalStateException: Toolkit not initialized
Le journal de terminaison complet est:
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)
Quelqu'un a des idées sur la cause du problème?
JavaFX
effectue l'initialisation "cachée" au démarrage. L'exécution de MediaPlayer
ne déclenche pas l'initialisation.
Les moyens les plus simples de le déclencher sont:
Application.launch()
exécutéeApplication
exécuté à partir d'un fichier jar empaqueté par fx tâches ant (par exemple construit à partir du projet JavaFX de Netbeans)Platform.startup(Runnable)
(Java 9+)Pour éviter l'exception d'initialisation, vous devez invoquer la méthode Application.launch () ou simplement instancier une nouvelle classe JFXPanel ()(même si elle n'est pas utilisée pour quoi que ce soit). Cela lancera JavaFxRuntime au démarrage de l'application
Pour instancier JFXPanel, ajoutez la ligne ci-dessous dans votre code
final JFXPanel fxPanel = new JFXPanel();
Importer le package suivant
import javafx.embed.swing.JFXPanel;
Il existe également un moyen d'initialiser explicitement la boîte à outils en appelant: com.Sun.javafx.application.PlatformImpl#startup(Runnable)
Un peu hacky, en raison de l'utilisation de * Impl, mais est utile si vous ne voulez pas utiliser Application
ou JXFPanel
pour une raison quelconque.
voir http://www.programcreek.com/Java-api-examples/index.php?api=com.Sun.javafx.application.PlatformImpl
com.Sun.javafx.application.PlatformImpl.startup(()->{});