无法打开存储在源包树

时间:2016-07-19 10:02:17

标签: java javafx filepath

由于我更改了Java源包的结构,因此某些文件打开函数不再需要工作了。我将一些资源(图标,属性文件等)从MyProject\res\移到了MyProject\src\res\

我认为我应该使用this.getClass().getResourceAsStream("icon.png")而不是文件路径字符串,但我不确定。

以下是我在更改资源位置之前访问图标文件的方法:

private final static String iconSourcePath = "file:res/icon/icon.png";

primaryStage.getIcons().add(new Image(iconSourcePath));

是否有访问Java中文件的规则?如果请求的文件在源文件中或在外面?

编辑:这是我找到的解决方案。

我发现最简单的方法是相对于src文件夹放置所有绝对路径。

例如,在我的项目中,我有这个文件夹层次结构:

src

  META-INF
    MANIFEST.MF

  res
    icon
      icon.png
    lang
      MessageBundle
      MessageBundle_en.properties
      MessageBundle_fr.properties
    pref
      AppProperties
      Properties.properties

  simulation
    log
      Console.java
    views
      settingsWindows
        settingsWindows.fxml
        SettingsWindows_Controller.java
      simulation
        simulation.fxml
        Simulation_Controller.java
      toolBar
        toolBar.fxml
        ToolBar_Controller.java
    Simulation.java

  Main.java

如果我需要在icon.png中添加SettingsWindows_Controller.java(在JavaFX中),我会这样做:

private final static String iconSourcePath = "/res/icon/icon.png";

stage.getIcons().add(new Image(iconSourcePath));

如果我想在任何文件中加载toolBar.fxml,我会这样做:

private final static String fxmlSourcePathToolBar = "/simulation/views/toolBar/toolBar.fxml";

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxmlSourcePathToolBar));

使用此方法,它将在调试模式(在IDE中)和JAR文件中工作。

1 个答案:

答案 0 :(得分:0)

最好使用getResourceAsStream函数来获取当前的类位置。例如:

ImageFactory.class.getResourceAsStream("image.png");

上面的代码加载文件夹中存在的图像,其中存在ImageFactory类,如果您的图像位于不同的文件夹中,则使用..和/运算符分别转到上一个文件夹并获取子文件夹。