无法在JavaFX中加载图像

java javafx-2 javafx

63495 观看

5回复

69 作者的声誉

我测试了这段代码,以便创建带图像的对话框。

final int xSize = 400;
final int ySize = 280;
final Color backgroundColor = Color.WHITE;
final String text = "SQL Browser";
final String version = "Product Version: 1.0";

final Stage aboutDialog = new Stage();
aboutDialog.initModality(Modality.WINDOW_MODAL);

Button closeButton = new Button("Close");

closeButton.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent arg0) {
        aboutDialog.close();
    }
});

GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));

Image img = new Image("logo.png");
ImageView imgView = new ImageView(img);

grid.add(imgView, 0, 0);

grid.add(new Text(text), 0, 1);
grid.add(new Text(version), 0, 2);
grid.add(closeButton, 14, 18);

Scene aboutDialogScene = new Scene(grid, xSize, ySize, backgroundColor);
aboutDialog.setScene(aboutDialogScene);
aboutDialog.show();

我将图像文件放入目录中/src。但由于某种原因,图像不会显示。你能帮我改正一下吗?

作者: Peter Penzov 的来源 发布者: 2013 年 4 月 19 日

回应 (5)


44

1565 作者的声誉

决定

只需替换此代码:

Image img = new Image("logo.png");

有了这个

Image img = new Image("file:logo.png");

文献参考。 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html

当你传递String给一个Image类时,它可以用四种不同的方式处理(从文档中复制):

// The image is located in default package of the classpath
Image image1 = new Image("/flower.png");

// The image is located in my.res package of the classpath
Image image2 = new Image("my/res/flower.png");

// The image is downloaded from the supplied URL through http protocol
Image image3 = new Image("http://sample.com/res/flower.png");

// The image is located in the current working directory
Image image4 = new Image("file:flower.png");

file:前缀是一个简单的URI方案,或者换句话说对方的http:协议分类器。这也可以在文件浏览器或Web浏览器中使用...;)

有关进一步的参考,您可以查看文件URI方案的Wiki页面:https//en.wikipedia.org/wiki/File_URI_scheme

快乐的编码,

Kalasch

作者: Kalaschni 发布者: 19.04.2013 11:56

16

165 作者的声誉

试试这个:

img = new Image("/logo.png");

如果没有给出指示URL(如http:file :)的协议部分,则该文件应该驻留在默认包中。如果你想让它放在一个不同的包中,请说com.my.images你可以在路径中添加这些信息:

img = new Image("/com/my/images/logo.png");
作者: hellerim 发布者: 20.04.2013 03:48

4

73 作者的声誉

这个功能:

Image image  = new Image(getClass()
        .getResourceAsStream("ChimpHumanHand.jpg"));
作者: joser 发布者: 07.03.2015 03:45

0

16 作者的声誉

将映像复制并粘贴到存在源包(NetBeans IDE中的源包)的文件夹中。然后

Image image = new Image("a1.jpg");
Image image = new Image("File:a1.jpg");

两者都有效。

作者: Sukhraj 发布者: 22.05.2015 11:58

8

642 作者的声誉

Image img = new Image("file:/logo.png");

或路径:

Image img = new Image("file:c:/logo.png");

要么

File f = new File("c:\\logo.png");
Image img = new Image(f.toURI().toString());

也可以用:

new Image(file:src/logo.png) //root of project
作者: Alexander Cyberman 发布者: 15.06.2016 12:25
32x32