在我的应用程序中,我将 JavaFX 的 Image
类与 InputStream
一起使用。 InputStream
是通过调用 URL.openStream()
提供的,它非常适合指向文件的 URL。但是,如果我的 URL 格式为 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();
我使用以下方法验证了 URL 是否正确
Files.copy(stream, new File("copy-image.bmp").toPath());
这会在 jar 存档中生成文件的副本。我认为 JavaFX 的 Image
类有问题(我使用的是 2.2.67-b01
)。
最佳答案
经过更多测试后,我发现这显然是(至少)JavaFX 2.2.67-b01
中的一个错误。该问题与流无关,而是与要加载的图像的位深度有关:可以毫无问题地加载 24 位图像,而尝试加载 32 位图像会导致错误。
切换到 JavaFX 8.0.31-b13
附带的 JDK 1.8.0_31
可以解决该问题。
关于java - 将 JarURLInputStream 用于 JavaFX 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854382/