我正在尝试遵循第二个教程 https://github.com/AlmasB/FXGL/wiki/Adding-Images-and-Sounds-%28FXGL-11%29当我运行该应用程序时,似乎出现错误。我使用 gradle run 或在 eclipse 中运行它,没有声音一切正常。
我的项目结构如下所示:
我使用 openJDK 11.0.3 和 linux mint 19.1 64 位。
它与教程中的程序基本相同,但我得到以下异常:
Message: javafx/scene/media/AudioClip Type: NoClassDefFoundError
Method: DesktopAudioService.loadAudioImpl() Line:
DesktopAudioService.kt:28
我猜我的 build.gradle 非常简单; gradle init 和依赖项:
plugins {
id 'application'
id 'java-library'
id 'org.openjfx.javafxplugin' version '0.0.7'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
api 'org.apache.commons:commons-math3:3.6.1'
implementation 'com.google.guava:guava:27.0.1-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
compile 'com.github.almasb:fxgl:11.1-beta'
}
javafx {
version = "12"
modules = [ 'javafx.controls' ]
}
mainClassName = 'game.idea.BasicGameApp'
我希望在单击键盘上的“f”时播放声音,而不会导致程序崩溃。我还希望得到一些导致错误的背景解释。
最佳答案
您使用 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 dependency )。
当您运行项目时,媒体类不存在,因此当您尝试播放声音时,您会收到报告的异常:
Fatal exception occurred: 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(AssetLoader.kt:247) 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'
。
关于java - FXGL : NoClassDefFoundError when calling FXGL. 播放 ("drop.wav"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931096/