IDEA使用JFX的相關問題


1 問題概述

首先是javafx找不到對應的類:
在這里插入圖片描述
其次是

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

這種問題。
或者是

Error: JavaFX runtime components are missing, and are required to run this application

這樣的問題。

2 解決方案

環境Manjaro+OpenJDK11,首先需要確保有OpenJFX,但是,不能直接使用pacman/yaourt安裝:
在這里插入圖片描述
雖然看上去沒什么問題,OpenJDK使用的也是pacman安裝的,想着JFX也可以這樣,安裝之后在

/usr/lib/jvm/java-11-openjdk/lib

下面確實有了JFX的文件,但是裝了之后IDEA死活識別不出來,沒辦法,只能手動安裝JFX。
手動安裝的OpenJFX一加就馬上識別出來了,所以,手動安裝吧,也不難,戳這里下載所需要的版本,解壓到對應的位置,然后在IDEA中的外部庫添加其中的lib文件夾即可:
在這里插入圖片描述
添加之后另一個問題是

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:

--module-path=JFX_LIB_PATH --add-modules=javafx.controls,javafx.fxml

其中JFX_LIB_PATH是JFX下的lib目錄路徑,但是不行,另一個方案是在源文件目錄下添加module-info.java:

module javafx.graphics{
	exports com.sun.javafx.util
}

也不行,直接報錯,然后又搜索到了另一個解決辦法,額外添加一個類似啟動類的java文件,比如叫App.java:

import javafx.application.Application;

public class App {
    public static void main(String[] args) {
        Application.launch(Main.class,args);
    }
}

然后修改IDEA的運行配置,把主類修改為App。
這樣筆者的問題就解決了,可以正常運行JFX程序了。

3 其他問題

Caused by: java.lang.NullPointerException: Location is required.

其中一個可能的辦法是:

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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM