你已经在说明问题了:
我尚未修改任何VM选项。
由于JavaFX 11不再是JDK的一部分,因此你必须从此处使用JavaFX SDK(如你所做的那样),或者使用Maven / Gradle从Maven Central检索JavaFX模块。
然后,你需要将SDK添加为库,以便IntelliJ可以找到JavaFX类。
但是,一旦做到了这一点,并且考虑到JavaFX jar
是模块,那么你仍然需要做两件事:
根据你的IntelliJ
输出,它在默认情况下添加javafx.graphics
和javafx.base
:
--add-modules javafx.base,javafx.graphics
-p /usr/lib/jvm/javafx-sdk-11.0.2/lib/javafx.base.jar
:/usr/lib/jvm/javafx-sdk-11.0.2/lib/javafx.graphics.jar
(请注意-p
与相同–module-path
)
这说明了为什么你的项目在第一种情况下运行,即当你没有将控件添加到场景中时,仅运行StackPane属于javafx.graphics
模块的控件,而在添加时添加了Label属于javafx.controls 模块的控件时,失败并显示已发布的异常。
已经说过很多次了:你需要为项目设置所需的VM选项。
首先阅读https://openjfx.io/openjfx-docs/
上的文档,包括IntelliJ文档,IDE的非模块化项目部分。并阅读第4部分。添加VM选项。
因此,单击运行->编辑配置,然后添加:
-p /usr/lib/jvm/javafx-sdk-11.0.2/lib --add-modules javafx.controls
应用并运行,该问题将得到解决。