JavaFX 8:通过class.getResource()添加自定义CSS文件错误

时间:2016-06-09 18:10:13

标签: java intellij-idea javafx-8

我正在研究official JavaFX tutorial。我试图将示例5-1中的代码添加到我的场景中,这是" Main"的一部分。按照说明分类:

Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
scene.getStylesheets().add(Login.class.getResource("Login.css").toExternalForm());
primaryStage.show();

我使用的是JavaFX运行时版本8.0.72-b15和IntelliJ IDEA 15.0.5。我已经存储了我的" Login.css"文件夹中的文件:

C:\Users\XXXXXXXX\IdeaProjects\Login\src

我的项目文件结构如下:

  • 登录
    • .idea
    • SRC
      • 样品
        • Controller.java
        • Main.java
        • sample.fxml
      • background.jpg
      • Login.css

当我跑步时#34; Main"我收到以下错误消息:

Information:Using javac 1.8.0_77 to compile java sources
Information:java: Errors occurred while compiling module 'Login'
Information:6/9/2016 2:04 PM - Compilation completed with 1 error and 0 warnings in 571ms
C:\Users\XXXXXXXX\IdeaProjects\Login\src\sample\Main.java
Error:(69, 36) java: cannot find symbol
  symbol:   class Login
  location: class sample.Main

This answer似乎暗示自定义CSS文件应位于" src"文件夹,但它似乎不适合我。如何让我的JavaFX项目导入这个自定义CSS文件?

3 个答案:

答案 0 :(得分:3)

您没有Login类...您只有sample.Main类,因此代码中的Login.class引用将无法解析(该错误与CSS无关)。< / p>

修复类引用错误后,还需要修复对css文件位置的引用(因为Login.css文件不在示例包中,而是在源根目录中,因此它将最终被复制到类路径的根目录)。要引用类路径根目录中的资源,请在资源名称前添加/,即/Login.css

因此,在完成这些更改后,您将拥有以下代码(您在以前的评论中验证过的代码):

scene.getStylesheets().add(sample.Main.class.getResource("/Login.css").toExtern‌​alForm());

答案 1 :(得分:0)

fxViewObject.getStylesheets().add(this.class.getResource("/Login.css").toExternalForm());

答案 2 :(得分:0)

scene.getStylesheets().add(this.getClass().getResource("/stylesheet.css").toString());

建议输入this.getclass(),您可以将其粘贴到任何类和任何包中。 toString()也可以工作,无论如何都会调用toExternalForm()。也许它更好,因为任何java程序员都知道toString。更容易理解代码是更好的。

(也许有一个小的性能差异,知道java的内部和外部的人可以评论这个顺便说一句。在字节码级别它不会换出我检查,只在运行时。)