JavaFX: "Toolkit" не инициализируется при попытке воспроизведения mp3-файла через класс MediaPlayer
Я пытаюсь сделать простой mp3-проигрыватель на фоне моей программы, используя следующее:
Media med = new Media(getClass().getResource("intro.mp3").toExternalForm());
MediaPlayer mPlayer = new MediaPlayer(med);
mPlayer.play();
Файл intro.mp3 находится в папке bin моего пакета вместе с другими файлами.class.
Проблема в том, что моя программа заканчивается:
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)
У кого-нибудь есть какие-либо идеи относительно причины проблемы?
4 ответа
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, но полезно, если вы не хотите использовать Application
или же JXFPanel
по какой-то причине.
См. http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl
com.sun.javafx.application.PlatformImpl.startup(()->{});