我按照描述的这里安装了OpenJDK-11。我运行了sudo apt install openjfx
我的java版本:
$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu1, mixed mode, sharing)但是我还是得到了ava.lang.NoClassDefFoundError: javafx/application/Application,这表明jre找不到FX类。
发布于 2019-04-26 21:40:30
Java不再与Java运行时一起打包。您必须下载并使用JavaFX运行时打包Jar,请参阅https://openjfx.io/openjfx-docs/,以了解如何最好地启动和运行Jar。
发布于 2020-04-03 13:20:53
我建议您使用https://openjfx.io/openjfx-docs/ .i am使用Eclipse,但它适用于所有.i
然后,在将VM选项设置为:
在IDE中右击项目->运行作为->运行配置->参数->VM参数
对于Windows,
--module-path "\path to javafx\lib" --add-modules javafx.controls,javafx.fxml对于Linux来说,
--module-path /path to javafx/lib --add-modules javafx.controls,javafx.fxml发布于 2022-08-14 08:03:59
您可能会遇到这个问题,因为您试图通过命令行从Kotlin运行JavaFX。由于Kotlin使用它自己的URLClassLoader作为父级,它没有由底层JVM的系统类加载器填充,所以在底层JVM中存在JavaFX (例如,因为JVM是包含JavaFX的JavaFX是Azul Zulu 18 )时,将不会发现JavaFX类,但在类路径上不会显式地发现。
解决方法是使用与Kotlin的URLClassLoader相同的URL创建自己的ClassLoader,使用JVM的系统类加载器作为父级,然后通过反射使用。
下面是一个示例,说明如何使用附加的main()方法来实现这一点。
import java.net.URLClassLoader
import javafx.application.Application
import javafx.event.*
import javafx.scene.*
import javafx.scene.control.*
import javafx.scene.layout.*
import javafx.stage.*
class Hello : Application() {
override fun start(primaryStage: Stage) {
primaryStage.setTitle("Hello")
val label = Label()
label.setText("Hello, world!")
val root = StackPane()
root.getChildren().add(label)
primaryStage.setScene(Scene(root))
primaryStage.show()
}
companion object {
@JvmStatic
fun main(vararg args: String) {
launch(Hello::class.java, *args)
}
}
}
fun main(vararg args: String) {
class Foo
URLClassLoader((Foo::class.java.getClassLoader() as URLClassLoader).getURLs(), ClassLoader.getSystemClassLoader())
.loadClass("Hello")
.getMethod("main", Array<String>::class.java)
.invoke(null, args)
}我在Kubuntu22.04上用Kotlin 1.7.10和Azul Zulu 18.0.2.fx测试了这一点。
https://askubuntu.com/questions/1136420
复制相似问题