I'm trying to make a simple mp3 play in the background of my program using the following:
Media med = new Media(getClass().getResource("intro.mp3").toExternalForm());
MediaPlayer mPlayer = new MediaPlayer(med);
mPlayer.play();
The intro.mp3 file is placed in the bin folder of my package, along with the other .class files.
The problem is that my program terminates with:
Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized
Full termination log is:
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)
Anybody have any ideas as per the cause of the problem?
JavaFX
performs "hidden" initialization on start. Running MediaPlayer
doesn't trigger initialization.
The easiest ways to trigger it are:
Application.launch()
executedApplication
based program being run from jar packaged by fx ant tasks (e.g. built from Netbeans JavaFX project)Platform.startup(Runnable)
(Java 9+)To avoid initialization Exception you have to either invoke Application.launch() method or simply instantiate a new JFXPanel() class (even if it isn’t used for anything). This will initiate JavaFxRuntime when application is started
To instantiate JFXPanel add below line in your code
final JFXPanel fxPanel = new JFXPanel();
Import following package
import javafx.embed.swing.JFXPanel;
There's also way to initialize toolkit explicitly, by calling:
com.sun.javafx.application.PlatformImpl#startup(Runnable)
Little bit hacky, due to using *Impl, but is useful, if you don't want to use Application
or JXFPanel
for some reason.
see http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl
com.sun.javafx.application.PlatformImpl.startup(()->{});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With