我的應用程序包含幾個不同的包,我希望能夠訪問存儲在應用程序的themes
文件夾中的CSS主題文件。JavaFX - 無法加載外部CSS主題
以下幾個教程和其他StackExchange問題和答案後,我還沒有找到任何適合我的情況。事實上,許多的「答案」的只說給.css文件移動到相同的文件夾類調用它;對我的情況來說這不是一個可接受的解決方案
我的目錄結構與此類似:
- Root Project Folder
- /data
- /themes
- /Theme.css
- /src
- sample
- /Main.java
- /Controller.java
- /sample.fxml
我將如何運用Theme.css
我sample.fxml
文件?
我扔在一起的作品來說明我的問題的示例項目。
Main.java:
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
Scene scene = new Scene(root, 300, 275);
scene.getStylesheets().add(
getClass().getResource("/themes/Theme.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
sample.fxml:
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
的錯誤:
Caused by: java.lang.NullPointerException
at sample.Main.start(Main.java:18)
也試過:
scene.getStylesheets().add("file:///themes/Theme.css");
scene.getStylesheets().add("file:///../themes/Theme.css");
這些都存在相同的 「資源未找到」 錯誤。
此代碼在上面的示例:
File css = new File("themes/Theme.css");
scene.getStylesheets().add("file:///" + css.getAbsolutePath());
但是,我不能得到完全相同的代碼到我的結構相同的較大的項目中工作。
我得到這個錯誤:
WARNING: Resource "file:////[PATH TO PROJECT]/themes/Theme.css" not found
錯誤顯示的完整路徑是完全正確的,並導致了確實存在的文件。
我怎麼會去解決此?由於它在示例項目中工作正常,但不是我的大項目,所以問題顯然在於我的其他項目代碼中的某處。
但是爲什麼編譯器告訴我一個文件時,它顯然不會不存在?
順便說一句,我的目標是讓用戶選擇一個「主題」使用樣式整個應用程序。 /themes
文件夾包含幾十個可供選擇的主題。
預先感謝您爲您的幫助!
檢查CSS文件被部署到build文件夾(細節取決於你的IDE和項目設置),但基本上你想看到一個''包含文件夾themes' Theme.css'無論你的輸出文件夾是什麼。 'themes'文件夾應該放在包含* class *文件的'sample'文件夾旁邊(不是Java源文件)。 –
我正在使用IntelliJ IDEA Ultimate。 build文件夾不包含'/ themes'目錄。不過,我很好奇。我從我的代碼訪問的其他外部文件不需要在構建路徑中;什麼是CSS不同的原因? – Zephyr
爲了測試目的,我也手動將整個'/ themes'文件夾複製到構建文件夾,並且發生同樣的問題。 – Zephyr