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?
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:
- ont
Application.launch()
exécuté - ont
Application
programme basé étant exécuté à partir de jar emballé par fx tâches ant (p.ex. construit à partir de Netbeans JavaFX project) - have JFXPanel a commencé
- appel
Platform.startup(Runnable)
(Java 9+)
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;
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.
voir http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl
com.sun.javafx.application.PlatformImpl.startup(()->{});