我正在尝试运行简单的JavaFx(2.0)应用程序,它将以缩略图的形式显示三个图像。操作系统是Windows7,我使用的是NetBeans 7.2 代码就是这个 -
public class FX17 extends Application{
public static void main(String[] args){
launch(args);
}
public void start(Stage stage){
HBox photoBar = new HBox();
Group root = new Group();
File f1 = new File("C:\\Users\\Pictures\\IMG_0021.jpg");
File f2 = new File("C:\\Users\\Pictures\\IMG_0022.jpg");
File f3 = new File("C:\\Users\\Pictures\\IMG_0023.jpg");
Image i1 = new Image(f1.toURI().toString());
Image i2 = new Image(f2.toURI().toString());
Image i3 = new Image(f3.toURI().toString());
ImageView iv1 = new ImageView(i1);
//iv1.setImage(i1);
iv1.setFitWidth(50);
iv1.setPreserveRatio(true);
iv1.setCache(true);
ImageView iv2 = new ImageView(i2);
//iv2.setImage(i2);
iv2.setFitWidth(50);
iv2.setPreserveRatio(true);
iv2.setCache(true);
ImageView iv3 = new ImageView(i3);
// iv3.setImage(i3);
iv3.setFitWidth(50);
iv3.setPreserveRatio(true);
iv3.setCache(true);
photoBar.getChildren().add(iv1);
photoBar.getChildren().add(iv2);
photoBar.getChildren().add(iv3);
//C:\Users\Public\Pictures\Sample Pictures
BorderPane pane = new BorderPane();
pane.setTop(photoBar);
root.getChildren().add(photoBar);
//pane.setLeft(linkBar);
Scene scene = new Scene(root);
scene.setFill(Color.BLACK);
stage.setScene(scene);
stage.setWidth(415);
stage.setHeight(200);
stage.sizeToScene();
stage.show();
}
}
对于两个图像程序运行并显示两个缩略图但是对于3个或更多图像,程序抛出OutOfMemoryError。图像为jpg,平均大小为2.5MB。我需要检查一些设置或图像格式吗? 以下构造函数对我来说很好。 Image img = new Image(file.toURI()。toString(),100,100,false,false);宽高比,smooth是false。
答案 0 :(得分:0)
我猜你的jpgs在高度和宽度方面非常大。
jpg占用的内存与加载的图像缓冲区不同。加载的图像是解码的未压缩位图,取决于图像高度/宽度/颜色深度,而不是原始的jpg文件大小。
修复OutOfMemory条件:
在图像构造函数中指定一个大小可确保一旦加载图像,Java只保留一个足够大的缓冲区来容纳调整大小的图像而不是完整大小的未压缩图像。