JavaFX - 无法在项目目录中加载图像

时间:2017-07-21 02:52:23

标签: java file javafx

我正在使用netbeans。我有一个这样的项目目录:

HTMLEdit/
        src/
           htmledit/
                   - pic.png
                   - MyClass.java

我试图获取图片,但它返回null。我曾经尝试过这两种方法,但仍无法让它发挥作用:

System.out.println(getClass().getResourceAsStream("/pic.png"));

System.out.println(getClass().getResourceAsStream("pic.png"));

造成这种奇怪行为的原因是什么?

编辑:

它看起来像是因为我在创建项目时选择了JAVAFX Project。我通过选择Java Project重新创建项目,它工作正常。可能这是Netbeans的错误。

2 个答案:

答案 0 :(得分:1)

getClass().getResourceAsStream()用于嵌入java jar文件中的文件。如果需要从文件系统中读取文件作为字节流,则应使用FileInputStream。这是文档:https://docs.oracle.com/javase/8/docs/api/java/io/FileInputStream.html

答案 1 :(得分:1)

当您执行getClass().getResourceAsStream("/pic.png")时,将要查看访问该文件的网址将是绝对网址。绝对URL由位于资源位置前面的斜杠表示。

如果你使用getClass()。getResourceAsStream(“pic.png”),那么将使用相对于该类所在的包的资源。

因为你说两个getResourceAsStream()语句在Netbeans中都不起作用,所以我在Netbeans中检查了下面的JavaFX代码,它运行得很好。

public class MyClass extends Application{
    @Override
    public void start(Stage primaryStage) {
      Pane root = new Pane();
        Image images = new Image(getClass().getResourceAsStream("pic.png"));
        ImageView image = new javafx.scene.image.ImageView(images);
        root.getChildren().add(image);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();

    }



    public static void main(String[] args) {
        launch(args);
    }

}

这是程序的结构和输出。 enter image description here

如果你想知道Netbeans版本,我使用的是Netbeans 8.0.2。 另外,请阅读以下文章。

Different ways of loading a file as an InputStream