在我的应用程序中我使用Image
类JavaFX和InputStream
s。 InputStream
是通过调用URL.openStream()
来提供的,该jar:file:C:/some.jar!/someImage.bmp
适用于指向文件的网址。但是,如果我的网址为 InputStream stream = url.openStream();
Image image = new Image(stream);
StackPane stackLayout = new StackPane();
stackLayout.getChildren().add(new ImageView(image));
Stage stage= new Stage(new Scene(stackLayout));
stage.setScene(scene);
stage.show();
,则无法正确加载图片。以下是我正在解决的片段:
Files.copy(stream, new File("copy-image.bmp").toPath());
我使用
验证了网址是否正确Image
导致jar存档中的文件副本。我认为JavaFX的2.2.67-b01
类有问题(我正在使用{{1}})。
答案 0 :(得分:2)
经过一些测试后,我发现这显然是(至少)JavaFX 2.2.67-b01
中的一个错误。问题与流无关,而与要加载的图像的位深度无关:24位图像可以毫无问题地加载,而尝试加载32位图像会导致错误。
切换到JDK 1.8.0_31
附带的JavaFX 8.0.31-b13
可以解决问题。