javafx 无法加载图片资源
Posted
技术标签:
【中文标题】javafx 无法加载图片资源【英文标题】:javafx cannot load image resource 【发布时间】:2019-04-30 12:05:40 【问题描述】:我是 javafx 的新手,在使用代码教程进行测试时得到了java.lang.reflect.InvocationTargetException
:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application
public static final String IMAGE_NAME = "groceries.jpg";
public static void main(String[] args)
launch(args);
@Override
public void start(Stage primaryStage) throws Exception
Scene scene = new Scene(setupScene(), 300, 300);
primaryStage.setScene(scene);
primaryStage.setTitle("Image Screen");
primaryStage.show();
StackPane setupScene()
StackPane root = new StackPane();
ImageView imageView = new ImageView();
imageView.setPreserveRatio(true);
imageView.setSmooth(true);
Image image = new Image(getClass().getClassLoader().getResource(IMAGE_NAME).toString());
imageView.setImage(image);
root.setPrefSize(250, 250);
imageView.setFitHeight(root.getPrefHeight());
imageView.setFitWidth(root.getPrefWidth());
root.getChildren().add(imageView);
return root;
异常是由java.lang.NullPointerException
在Image image = new Image(getClass().getClassLoader().getResource(IMAGE_NAME).toString());
行引起的
图像文件在我的项目文件夹中,但似乎没有加载。我能够使用Image image = new Image(new File(IMAGE_NAME).toURI().toURL().toString())
获取图像,但是当我切换回Image image = new Image(getClass().getClassLoader().getResource(IMAGE_NAME).toString())
时,它就无法正常工作。
有人知道我的程序为什么会这样吗?任何想法将不胜感激...
编辑:我的图像文件在 src 文件夹的同一级别:
- projectfolder
- groceries.jpg
- src
- Main.java
我正在使用 IntelliJ JavaFX Application 创建项目,一切都处于默认状态。
【问题讨论】:
图片在项目中的位置? 运行应用时工作目录是类路径根目录吗? 【参考方案1】:Image image = new Image(getClass().getClassLoader().getResource(IMAGE_NAME).toString())
和 Image image = new Image(new File(IMAGE_NAME).toURI().toURL().toString())
做两件不同的事情。
第一个将基于类加载器获取资源,这在直接从 jar 文件中提取资源时最常用。第二个用于从文件系统加载图像,这就是为什么它适用于您的情况(这就是文件所在的位置!)
【讨论】:
谢谢!但是有没有办法让我使用第一种方法获取图像文件而不是异常? 当然,你可以切换方法(先试试文件)然后检查new File(IMAGENAME).exists()
。【参考方案2】:
getClass().getClassLoader().getResource() 行在 Main 类所在的同一位置搜索文件。
如果你在 src 中有这个图片,你只需要添加一个 '/' :
private String theme1Url = getClass().getResource("/groceries.jpg").toExternalForm();
【讨论】:
谢谢!在我将图像文件移动到 src 文件夹后,它就起作用了。但是添加斜线仍然给了我这个例外:-[ 如果将文件移动到 src 中,则不需要斜线,斜线就是项目文件夹中的文件:)以上是关于javafx 无法加载图片资源的主要内容,如果未能解决你的问题,请参考以下文章
使用资源文件夹在使用 IntelLiJ 的 JavaFX 项目上加载图像