我正在使用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的错误。
答案 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);
}
}
如果你想知道Netbeans版本,我使用的是Netbeans 8.0.2。 另外,请阅读以下文章。