当前位置: 首页 > 知识库问答 >
问题:

JavaFX-加载映像和内存问题

贺俊材
2023-03-14

我有一个问题,加载图像到我的应用程序。我正在尝试做一个简单的图像浏览器。在左边我有一个文件夹列表。单击列表上的文件夹名称后,图像应该出现在右侧(流窗格)。每个图像都在带有边框的HBox中。但我很快就会犯这样的错误:

java.lang.outofmemoryerror java heap space

我看任务管理器-如果我只加载6张照片,应用程序占用500MB的内存!还有一件事--如果我更改列表上的文件夹,内存就会被占用。在选择另一个文件夹时,我正在创建新的flowPane

flowPane = new FlowPane();

所以包含所有ImageViews的旧版本应该被垃圾回收器删除,对吗?

如何有效地管理应用程序中的图像?

  for(int i = 0 ; i < zdjecia.length; i++){
        ImageView iv2 = new ImageView();
        Image image = new Image("file:"+zdjecia[i].getAbsolutePath());
         iv2.setImage(image);
         if( image.getHeight() > image.getWidth()){
                iv2.fitHeightProperty().bind(szerokoscZdjecia.multiply(0.8).subtract(6));
        }else
                iv2.fitWidthProperty().bind(szerokoscZdjecia.subtract(6));

         iv2.setPreserveRatio(true);
         iv2.setSmooth(true);
         iv2.setCache(false);

         String styl = "-fx-border-color: #b2b3b3;"
                 + "-fx-border-width: 2;";

         HBox boxNaFotke = new HBox();
         boxNaFotke.prefWidthProperty().bind(szerokoscZdjecia);
         boxNaFotke.prefHeightProperty().bind(szerokoscZdjecia.multiply(0.8));
         boxNaFotke.setAlignment(Pos.CENTER);
         boxNaFotke.setStyle(styl);
         boxNaFotke.getChildren().add(iv2);
         fotki.add(boxNaFotke);
         flowPane.getChildren().add(boxNaFotke);
    }

共有1个答案

鱼阳伯
2023-03-14

如果使用构造函数缩放image,所需的内存量将大大减少。

文档中的一些示例

//加载图像并将其大小调整为100x150,而不保留其原始纵横比
//图像位于类路径的my.res包中
image image2=新图像(“my/res/flower.png”,100,150,false,false);

//加载图像并将其大小调整为100宽度,同时保留其
//原始纵横比,使用更快的筛选方法
//图像通过http协议从提供的URL下载
image image3=新图像(“http://sample.com/res/flower.png”,100,0,false,false);

 类似资料:
  • 我在从控制器加载javaFX中的图像时遇到了一些麻烦。 我把一些图像放在src/文件夹中,甚至放在img/文件夹中,但仍然得到“无效URL或未找到资源”。 但我无法检索图像“java.lang.IllegalArgumentException:无效URL或未找到资源” 谢谢你的帮助

  • 问题 我试图把一个python文件变成一个EXE文件,但是我似乎每次都遇到同样的问题,无论是CX_Freeze还是PyInster。我只是尝试使用pyInster和我做了一个EXE文件使用命令 一切正常。它在dist文件中创建exe。但是,当我打开exe时,它会显示一个命令窗口,然后很快关闭。我设法捕获了我在使用打印屏幕时遇到的错误,它显示pygame错误:无法打开image family。jpg

  • 我试图在JavaFX中实现一个非常简单的Raspberry Pi接口。我用的是一台电脑。基于fxml的布局和样式我的项目与css。我的问题是,尽管该应用程序在我的主计算机(从eclipse运行)上运行得很好,但它在Raspberry上也不工作,当我尝试在主计算机上运行导出的jar时也不工作。 我就是这样把纽扣剥皮的。当然,resources/images文件夹位于我的构建路径中。按钮的颜色与我在c

  • 下面是我的代码: 只是一个加载图像的文件。 我得到以下错误: 以下是完整的代码:

  • 我正在使用Scene Builder2.0和eclipse Luna。在fxml文件中,我有我的场景的代码和图像。如果我在eclipse上测试这一点,一切都是正常的,但是如果我将它导出到可运行的jar中,然后运行它,我就会得到没有图像的窗口...以下是部分代码: 文件结构: 我觉得问题出在路径上,但我不知道这条路是怎么走的。加载程序代码: 初始化函数: