JavaFX: "Toolkit" non initialisé lors de la lecture d'un fichier mp3 par la classe MediaPlayer

j'essaie de faire un jeu mp3 simple dans le fond de mon programme en utilisant ce qui suit:

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

l'intro.le fichier mp3 est placé dans le dossier poubelle de mon paquet, avec l'autre .les fichiers de classe.

le problème est que mon programme se termine par:

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

Journal de fin D'emploi 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 que par la cause du problème?

26
demandé sur Jonathan 2012-12-25 01:10:49

4 réponses

JavaFX effectue une initialisation "cachée" au démarrage. Lancer MediaPlayer ne déclenche pas l'initialisation.

les moyens les plus faciles de le déclencher sont:

24
répondu Sergey Grinev 2018-06-24 23:23:48

pour éviter l'exception d'initialisation, vous devez soit invoquer L'Application .launch() méthode ou tout simplement instanciez une nouvelle classe JFXPanel () (même si elle n'est utilisée pour rien). cela lancera JavaFxRuntime quand l'application est commencée

to instantiate JFXPanel ajouter la ligne ci-dessous dans votre code

 final JFXPanel fxPanel = new JFXPanel();

colis D'importation suivant

import javafx.embed.swing.JFXPanel;
12
répondu Sagar Damani 2017-04-07 11:49:58

il y a aussi moyen d'initialiser la boîte à outils explicitement, en appelant: com.sun.javafx.application.PlatformImpl#startup(Runnable)

petit 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.

4
répondu krzychek 2016-08-10 20:59:40
0
répondu Wolfgang Fahl 2017-06-27 13:57:33