Вы используете плагин JavaFX Gradle и настраиваете модули в своей сборке следующим образом:
javafx {
version = "12.0.1"
modules = [ 'javafx.controls' ]
}
Это означает, что плагин добавит в ваш проект javafx.base
, javafx.graphics
и javafx.controls
модули, с версией и правильным классификатором, основанным на вашей платформе.
Если вы проверите свои внешние библиотеки, вы не найдете никаких других модулей JavaFX реализация , но вы можете найти «пустой»"модули, которые использует FXGL:
Так что Base, Graphics и Controls используют классификатор Mac (в моем случае) и версию, которую я установил (12.0.1)в то время как другие модули (FXML, Media и Swing) являются пустыми модулями, добавленными из FXGL (см., например, Медиа зависимость ).
Когда вы запускаете свой проектклассы Media отсутствуют, поэтому при попытке воспроизведения звука вы получаете сообщение об исключении:
Произошло фатальное исключение: java.lang.NoClassDefFoundError: javafx / scene / media / AudioClip E:com.almasb.fxgl.audio.impl.DesktopAudioService.loadAudioImpl (DesktopAudioService.kt: 28) E: com.almasb.fxgl.audio.impl.DefaultAudioService.loadAudio (DefaultAudioService.kt: 29) E: com.almasb.fxgl.app.AssetLoader.loadSound: Asset247) E: com.almasb.fxgl.dsl.FXGL $ Companion.play (FXGL.kt: 228) E: com.almasb.fxgl.dsl.FXGL.play (FXGL.kt) E: game.idea.BasicGameApp $ 5.onActionBegin (BasicGameApp.java:61)
Решение довольно простое: просто добавьте недостающие модули в вашу сборку:
javafx {
version = "12.0.1"
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.swing', 'javafx.media' ]
}
Наконец, в качестве отступления, вы можетеиспользуйте 'com.github.almasb:fxgl:11.3'
.