JavaFX无法连接CSS文件:Home类无法找到d.css求助
JavaFX样式表d.css无法找到的解决方案
核心问题
你的代码中使用Home.class.getResource("d.css")尝试加载样式表,但该方法默认从当前类所在的包路径下查找资源。结合你的目录结构(d.css在src/main/resources/com/example/cw,Home.java在src/main/java/com/example/cw),虽然编译后资源会和类文件同目录,但路径引用方式可能因构建工具或类加载机制导致找不到文件。
修复方法
方法一:使用类加载器从类路径根查找
类加载器的getResource()方法会从类路径根目录开始搜索,路径需要完整的包结构:
newScene.getStylesheets().add(Home.class.getClassLoader().getResource("com/example/cw/d.css").toExternalForm());
方法二:使用绝对类路径引用
在资源路径前加/,表示从类路径根目录开始定位:
newScene.getStylesheets().add(Home.class.getResource("/com/example/cw/d.css").toExternalForm());
必要检查
- 确认构建工具配置:Maven/Gradle会自动将
src/main/resources下的文件复制到编译后的类路径,检查target/classes/com/example/cw下是否存在d.css。 - 文件名大小写:确保代码中的
d.css和实际文件名完全一致,JavaFX对文件名大小写敏感。
修改后的完整代码
package com.example.cw; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.layout.AnchorPane; import javafx.scene.text.Text; import java.net.URL; import java.util.ResourceBundle; public class Home implements Initializable { @FXML Text d; @FXML AnchorPane x; @Override public void initialize(URL url, ResourceBundle resourceBundle) { x.sceneProperty().addListener((observable, oldScene, newScene) -> { if (newScene != null) { newScene.getStylesheets().add(Home.class.getClassLoader().getResource("com/example/cw/d.css").toExternalForm()); } }); } }
内容的提问来源于stack exchange,提问作者ineedmoney
相关产品推荐
相关产品推荐

