You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:25:12