繁体   English   中英

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

[英]JavaFX: “Toolkit” not initialized when trying to play an mp3 file through MediaPlayer class

我正在尝试使用以下命令在程序后台播放一个简单的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()方法或简单地实例化一个新的JFXPanel()类 (即使它没有用于任何东西)。 启动应用程序时,这将启动JavaFxRuntime

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

 final JFXPanel fxPanel = new JFXPanel();

导入以下包

import javafx.embed.swing.JFXPanel;

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

由于使用* Impl,因此有点hacky,但是如果您由于某些原因不想使用ApplicationJXFPanel ,则很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM