JavaFX:尝试通过MediaPlayer类播放mp3文件时,“工具箱”未初始化

我试图在我的程序的后台使用下面的简单的MP3播放:

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

intro.mp3文件与其他.class文件一起放在我的包的bin文件夹中。

问题是我的程序终止于:

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

完全终止日志是:

 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) 

任何人根据问题的原因有什么想法?

JavaFX在启动时执行“隐藏”初始化。 运行MediaPlayer不会触发初始化。

触发它最简单的方法是:

  • Application.launch()执行
  • 基于Application的程序从fx ant任务打包的jar中运行(例如,从Netbeans JavaFX项目构build)
  • 有JFXPanel启动

为了避免初始化exception,你必须调用Application.launch()方法或者简单地实例化一个新的JFXPanel()类 (即使它没有用于任何东西)。 这将启动JavaFxRuntime

要实例化JFXPanel,请在代码中添加以下行

  final JFXPanel fxPanel = new JFXPanel(); 

导入下面的包

 import javafx.embed.swing.JFXPanel; 

也可以通过调用com.sun.javafx.application.PlatformImpl#startup(Runnable)来显式初始化工具包,

有点hacky,由于使用* Impl,但有用,如果你不想使用ApplicationJXFPanel出于某种原因。

请参阅http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl

 com.sun.javafx.application.PlatformImpl.startup(()->{});