将图像加载到 ImageView JavaFX [英] Load image to ImageView JavaFX
问题描述
我想在对话框窗口中显示图像(保存在项目文件夹中),但是当我运行我的方法 showDialogWithImage 时,我得到 FileNotFoundExcpetion: imgspic1.jpg(系统找不到指定的文件),尽管图像位于
I would like to display image(saved in project folder) in dialog window, but when I run my method showDialogWithImage I get FileNotFoundExcpetion: imgspic1.jpg (The system cannot find the file specified), although the image is located there.
我也试过用这种方式加载图片:
Image image = new Image(getClass().getResourceAsStream(path));,但是遇到了同样的问题.
I have tried load image on this way too:
Image image = new Image(getClass().getResourceAsStream(path));, but got the same problem.
是否还有其他可能将图像加载到 ImageView 中?
感谢您的帮助!
Are there some others possibilities to load image to ImageView ?
Thank you for help!
我的 Java 代码位于项目文件夹中的 srcmyProjectgui.
My Java code is located in srcmyProjectgui in project folder.
path="imgspic1.jpg"//imgs 位于项目文件夹中
path="imgspic1.jpg" // imgs is located in project folder
public void showDialogWithImage(String path) {
final Stage dialogStage = new Stage();
logger.info(path);
InputStream is = null;
try {
is = new FileInputStream(path); // here I get FileNotFoundException
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Image image = new Image(is);
ImageView view = new ImageView();
view.setImage(image);
Button btnOK = new Button("OK");
btnOK.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
dialogStage.close();
}
});
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create()
.children(view, btnOK).alignment(Pos.CENTER)
.padding(new Insets(35)).build()));
dialogStage.show();
}
推荐答案
getClass().getResourceAsStream(path)
将从调用类的位置开始其文件搜索.所以通过使用这个路径"imgspic1.jpg"
,你说这是你的文件结构
getClass().getResourceAsStream(path)
will start its file search from the location of the calling class. So by using this path "imgspic1.jpg"
, you're saying this is your file structure
srcmyProjectguiimgspic1.jpg
要使搜索回溯,您需要在 imgs
之前添加额外的分隔符.所以
To have the search traverse back, you need the extra separator before imgs
. So
"imgspic1.jpg"
另外,我认为当您使用反斜杠作为分隔符时,您需要将其转义.所以
Also, I think when you use a back slash as separator, you need to escape it. So
"\imgs\pic1.jpg
或者直接使用正斜杠
"/imgs/pic1.jpg
另一种选择是使用类加载器,它将从根搜索,您不需要开始分隔符
Another option is to use a class loader, that will search from the root, where you don't need the beginning separator
getClass().getClassLoader().getResourceAsStream("imgs/pic1.png");
这篇关于将图像加载到 ImageView JavaFX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!