Issue Description:
I am developing a JavaFX application using IntelliJ IDEA and encountering an issue where the application does not locate a CSS file placed in the resources folder.

在我的项目中,有一个100文件位于101下.尽管如此,当try 将其加载到我的带有102的JavaFX应用程序中时,它始终返回103.

Relevant Code Implementation:

public class MainGui extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane borderPane = new BorderPane();
        borderPane.setCenter(new DocumentSelectionView());

        Scene scene = new Scene(borderPane, 1400, 900);

        // Attempting to load the CSS file
        scene.getStylesheets().clear();
        System.out.println(System.getProperty("user.dir")); // Prints the project directory

        // Different methods tried to add the stylesheet
        // Method 1
        scene.getStylesheets().add("src/main/resources/view/style.css"); 
        // Method 2
        scene.getStylesheets().add(getClass().getResource("/view/style.css").toExternalForm()); 
    }
}

Problems Encountered:

  1. Method 1(100):

    • Results in the warning:
      WARNING: Resource "src/main/resources/view/style.css" not found.
  2. Method 2(100):

    • 返回100,导致在try 呼叫101时出错.

Additional Information:

  • 项目目录打印正确,确认了工作目录.

  • 我已经验证了文件路径中没有印刷错误.

  • Css文件肯定存在于指定的目录中.

  • Css文件不在目标输出文件夹中.

  • 我正在使用IntelliJ IDEA作为我的项目 struct ,而不是Maven或Gradle.以下是我的100文件的相关内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <module version="4">
      <component name="AdditionalModuleElements">
        <content url="file://$MODULE_DIR$" dumb="true">
          <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
          <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
          <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
          <excludeFolder url="file://$MODULE_DIR$/target" />
        </content>
      </component>
    </module>
    

Question:

定位100文件失败的原因可能是什么,以及如何正确地将其加载到我的JavaFX应用程序中?

如有真知灼见或建议,我们将不胜感激!

Attempts:

我try 了几种方法来解决100始终返回101的问题.以下是我采取的步骤的摘要:

  • 在不同包的其他类中复制了该问题,遇到了相同的问题,100返回101.

  • 已try 各种字符串来定位该css文件,包括:

    • 100

    • 100

    • 100

    • 100

  • 已将css文件直接移到100文件夹中.

  • try 使用不同的css文件名和创建这些文件的方法.

  • 已重新启动IntelliJ Idea.

  • 重建了整个软件.

  • 使IntelliJ Idea中的缓存无效,并执行重新启动(我在每次更改后都会这样做,只是为了确保).

  • 我确实try 过在其他类别的其他包中复制它.GetRecource()总是返回空.

  • 到设置-&gt;编译器-&gt;我已添加!?*.css个资源模式

  • getClass().getClassLoader().getResource("/view/style.css");

  • 直接在项目文件夹/src/main/Resources-&gt;/Resources中移动资源文件夹

推荐答案

到我添加的设置->;编译器->;资源模式!?*.css"

你不会想这么做的.

这将.css个文件视为NOT个资源.这与你想要的恰恰相反.

但请注意,(我认为)编译器设置仅用于处理标记为Sources的目录下的文件,不会影响标记为Resources的文件.从我的测试中,无论Compiler | Resource patterns设置如何,我标记为Resources的目录下的.css个文件始终被复制到输出目录.所以这很可能不是你问题的根本原因.

Working example

我试过:

  • 使用生成的样例代码(使用IDEA new Java项目向导)在IDEA中创建一个新的Java项目(不是JavaFX项目).
  • manually setting a resource path in the IDE for the module.
  • 在我配置的资源目录中放置一个css资源文件.
  • 修改了src目录中的样例Java代码以查找资源.

默认情况下(没有其他更改),我放在我创建的资源目录中的.css文件被复制到构建输出目录,并且可以通过getResource查找找到.

构建后:

<projectdir>/out/production/<modulename>/

包含以下文件:

Main.class
styles.class

resources

/src/Main.java

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        System.out.println(Main.class.getResource("/styles.css"));
    }
}

/resources/styles.css

.root {
    -fx-base: mistyrose;
}

Output

Hello world!
file:/C:/dev/resourcetest/out/production/resourcetest/styles.css

Settings | Compile | Resource patterns

这些是Idea 2023.2.4(UE)的新Java项目的默认值,我没有更改它们:

!?*.java
!?*.form
!?*.class
!?*.groovy
!?*.scala
!?*.flex
!?*.kt
!?*.clj
!?*.aj

Recommendation

使用构建工具(例如Maven或Gradle),跟随Maven standard layout,并将构建项目与您的IDE同步,通常比在IDE中手动配置项目更好.

Java相关问答推荐

那么比较似乎不是词典学的,尽管doctor 这么说

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

我想了解Java中的模块化.编译我的应用程序时,我有一个ResolutionException

scanner 如何在执行hasNextLine一次后重新读取整个文件?

如何配置ActiveMQ Artemis以使用AMQP 1.0和其他协议与Java

为什么我要创建一个单独的互斥体/锁对象?

如何判断一个矩阵是否为有框矩阵?

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

声明MessageChannel Bean的首选方式

二进制数据的未知编码/序列化

从映射列表中检索所有键

如何在IntelliJ IDEA的Build.sbt中添加外部JAR文件?

如何处理两个几乎相同的XSD文件?

如何在字节数组中反转UTF-8编码?

rest api服务 spring 启动中出现IllegalFormatConversionException

Java编译器是否进行了持续的折叠优化,以及如何进行判断?

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

窗口启动后不久,从java.awt.Graphics disapear创建的矩形

类型安全:从 JSONArray 到 ArrayList> 的未经判断的转换