由于我更改了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文件中工作。
答案 0 :(得分:0)
最好使用getResourceAsStream函数来获取当前的类位置。例如:
ImageFactory.class.getResourceAsStream("image.png");
上面的代码加载文件夹中存在的图像,其中存在ImageFactory类,如果您的图像位于不同的文件夹中,则使用..和/运算符分别转到上一个文件夹并获取子文件夹。