我正在尝试将一个JavaFX项目从8 Java版本升级到11版本。当我使用“run”Gradle任务(我遵循了Openjfx教程)时,它可以工作。但是当我构建(使用“jar”Gradle任务)并执行(使用“java -jar”)jar文件时,会出现消息“错误:缺少JavaFX运行时组件,这些组件需要运行此应用程序。”
这是我的build.gradle文件:
group 'Project'
version '1.0'
apply plugin: 'java'
sourceCompatibility = 1.11
repositories {
mavenCentral()
}
def currentOS = org.gradle.internal.os.OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
platform = 'win'
} else if (currentOS.isLinux()) {
platform = 'linux'
} else if (currentOS.isMacOsX()) {
platform = 'mac'
}
dependencies {
compile "org.openjfx:javafx-base:11:${platform}"
compile "org.openjfx:javafx-graphics:11:${platform}"
compile "org.openjfx:javafx-controls:11:${platform}"
compile "org.openjfx:javafx-fxml:11:${platform}"
}
task run(type: JavaExec) {
classpath sourceSets.main.runtimeClasspath
main = "project.Main"
}
jar {
manifest {
attributes 'Main-Class': 'project.Main'
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml'
]
}
}
run {
doFirst {
jvmArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml'
]
}
}
你知道我应该做什么吗?
Main::main
方法中,我调用了HelloFX.launch(args)
,这是不被允许的,而应该调用HelloFX.main(args)
。但是调用HelloFX.launch(HelloFX.class, args)
就可以了,所以在这种情况下HelloFX::main
方法就是多余的(例如,IDE可以使用它)。 - user1803551Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
- FearX