通过getClass()加载文件.getResource()失败,File()工作

时间:2016-03-21 12:50:23

标签: java javafx

我正在尝试通过以下代码段将css文件合并到我的JavaFX应用程序中:

public void loadExternalCSS() {
      System.out.println("CLASSPATH: "+System.getProperty("java.class.path"));
      try{
        skinCSS = getClass().getResource("css/default_skin.css").toExternalForm();
      }
      catch(Exception e){
          System.err.println("Exception: " + e);
          e.printStackTrace(System.err);
      }
}

运行时产生的结果:

java.lang.NullPointerException
    at 
robotikosanomologitos.RobotikosAnomologitos.loadExternalCSS(RobotikosAnomologitos.java:529)
    at robotikosanomologitos.RobotikosAnomologitos.start(RobotikosAnomologitos.java:491)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)

奇怪的是,在这个函数之上有几行,我有一个从properties文件中读取的小函数。

public void readPropertiesFile() {
        Properties props = new Properties();
        InputStream is;
        try {
            File f = new File("properties");
            is = new FileInputStream(f);
        }
        /* etcetera */
}

这就像一个魅力。 properties文件位于项目目录C:\~my_projects_folder~\RobotikosAnomologitos

的根目录下

在搜索解决方案后,我看到getClass().getResource()尝试在类路径中查找资源。我尝试在每次运行时打印classpath,然后我得到: RobotikosAnomologitos\dist\run125323585\RobotikosAnomologitos.jar这是合乎逻辑的。

在运行程序时查看此临时文件夹后,我找不到css文件夹或css文件。

但该文件确实位于RobotikosAnomologitos\css\default_skin.css下的工作项目目录中。由于某种原因,它不会在运行时在类路径中生成它,导致getResource()在查找时返回null。

关于如何包含它的任何想法?

编辑:我忘了提及我已将css/default_skin.css放在src包下,并显示在Netbeans的包树(src/css/default_skin.css)中

以同样的方式,我有一些位于src/graphics/下的图形,可以通过getClass().getResourceAsStream()加载得很好。对于无法找到css文件的原因,这也让我感到困惑。也许它不会在jar编译?

3 个答案:

答案 0 :(得分:1)

如果您为某个类调用getResource()而不添加/,则该路径将被视为相对于该类的包。

如果您已将资源正确添加到类路径中,则应该可以:

 skinCSS = getClass().getResource("/css/default_skin.css").toExternalForm();

答案 1 :(得分:0)

如果要使用css

进行检索,则需要在classpath中添加getClass().getResource("css/default_skin.css").toExternalForm();文件夹

答案 2 :(得分:0)

检查您是否使用CSS文件的二进制编码(请参阅项目属性>打包)。如果您使用,提到的文件扩展名应为“.bss”。