首先是javafx找不到對應的類:
其次是java
class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x50f36265) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x50f36265
這種問題。
或者是bash
Error: JavaFX runtime components are missing, and are required to run this application
這樣的問題。app
環境Manjaro+OpenJDK11,首先須要確保有OpenJFX,可是,不能直接使用pacman/yaourt安裝:
雖然看上去沒什麼問題,OpenJDK使用的也是pacman安裝的,想着JFX也能夠這樣,安裝以後在jvm
/usr/lib/jvm/java-11-openjdk/lib
下面確實有了JFX的文件,可是裝了以後IDEA死活識別不出來,沒辦法,只能手動安裝JFX。
手動安裝的OpenJFX一加就立刻識別出來了,因此,手動安裝吧,也不難,戳這裏下載所須要的版本,解壓到對應的位置,而後在IDEA中的外部庫添加其中的lib文件夾便可:
添加以後另外一個問題是ui
class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x50f36265) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x50f36265
給出的最多的答案是修改VM Options:this
--module-path=JFX_LIB_PATH --add-modules=javafx.controls,javafx.fxml
其中JFX_LIB_PATH是JFX下的lib目錄路徑,可是不行,另外一個方案是在源文件目錄下添加module-info.java:spa
module javafx.graphics{ exports com.sun.javafx.util }
也不行,直接報錯,而後又搜索到了另外一個解決辦法,額外添加一個相似啓動類的java文件,好比叫App.java:code
import javafx.application.Application; public class App { public static void main(String[] args) { Application.launch(Main.class,args); } }
而後修改IDEA的運行配置,把主類修改成App。
這樣筆者的問題就解決了,能夠正常運行JFX程序了。component
Caused by: java.lang.NullPointerException: Location is required.
其中一個可能的辦法是:xml
Parent root = FXMLLoader.load(getClass().getResource("xxx.fxml"));
改成:
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("xxx.fxml"));
筆者試過,這個方法不行,另外一個解決的方法是,修改pom.xml:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.fxml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
其中include中的兩個星號指的是fxml的文件夾的位置。
筆者試過這個方法可行,若fxml文件在源碼根目錄,能夠修改成:
<include>*.fxml</include>