image - 如何使用位于当前工作目录之外的目录中的图像文件创建新的 Image()

标签 image javafx imageview

我正在尝试在 TilePane 中列出图像。当我尝试创建图像 new ImageView("address"); 时出现错误,地址如下:

"file:D:/Chrysanthemum.jpeg/"

以上内容在当前工作目录之外的目录中。其他图像在类路径中。

这是 scec 中的其余代码:

public class TilePaneExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox(30);

        String[] imageResources = new String[]{
            //loading images
            "file:D:/Chrysanthemum.jpeg/",
            "ImageResources/faviicon.png",
            "ImageResources/jquery-logo.png",
            "ImageResources/linkedin_32.png",
            "ImageResources/loading1.png",
            "ImageResources/twitter.png",
            "ImageResources/twitter_32.png",
            "ImageResources/wp.png",};

        // Pane
        TilePane tilePane = new TilePane();
        tilePane.setHgap(5);
        tilePane.setVgap(5);

        for (final String imageResource : imageResources) {
            Image image = new Image(getClass().getResourceAsStream(imageResource));
            ImageView imageView = new ImageView(image);
            imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    File f = new File(imageResource);
                    String absolutePath = f.getAbsolutePath();
                    String folderPath = absolutePath.
                            substring(0, absolutePath.lastIndexOf(File.separator));
                    System.out.println(folderPath);
                    try {
                        // Desktop.getDesktop().open(new File("D:\\WAKILI\\WAKILIdb"));
                        Desktop.getDesktop().open(new File(folderPath));
                    } catch (IllegalArgumentException iae) {
                        System.out.println("File Not Found");
                    } catch (IOException ex) {
                        Logger.getLogger(TilePaneExample.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
            tilePane.getChildren().add(imageView);
        }

        root.getChildren().addAll(tilePane);
        primaryStage.setTitle("TilePane Example");
        Scene scene = new Scene(root, 300, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

错误:

Caused by: java.lang.NullPointerException: Input stream must not be null

请帮忙。谢谢大家。

最佳答案

即使对于非类路径图像,您也正在使用 getClass().getResourceAsStream(imageResource),对于您未从类路径加载的情况,直接传递 URL 字符串:

Image image;
if(imageResource.startsWith("file:")) {
  image = new Image(imageResource);
} else {
  image = new Image(getClass().getResourceAsStream(imageResource));
}

关于image - 如何使用位于当前工作目录之外的目录中的图像文件创建新的 Image(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090399/

相关文章:

javafx - TableView 实时 Javafx

JavaFX 在 for 循环期间暂停而不使用 Thread.Sleep()

android - 在 Android 中删除 ImageView 边框

java - Android ImageView 不显示图像?

Facebook API : how to get different resolution for Profile Pictures?

javascript - 如何在 Highcharts 标题和副标题中添加图像

image - dicom 图像最小最大像素和位置

python - 不支持的 TIFF 压缩

javafx - 一些 JavaFX 文档丢失 (NetBeans 11)

java - Android Java Bitmap.getByteCount() 显示的大小比实际大小大