我已经用Java创建了一个程序,希望将其打包到一个可执行的jar文件中。我希望该程序从jar文件中获取图像并显示它们。我创建了一个抽象类,该类具有一个采用String文件名并返回Image对象的方法。但是,当我尝试运行此方法时,它失败并产生“ IOException:流关闭”错误。
我找不到任何有关为何关闭流的信息。据我所知,我的程序中没有任何其他输入流。在新的main中仅使用JFrame设置使用该方法仍会产生相同的错误。
是仅通过图像名称(即“ example.png”)调用图像文件,还是使用其相对路径(即“ /src/icons/example.png”),还是使用其绝对路径(即“ C: /Users/My_Name/Desktop/EXAMPLE/src/icons/example.png“)我收到相同的流关闭错误。
public static Image importImage(String fileName) throws IOException {
Image img = null;
byte[] data = new byte[10000];
BufferedInputStream bis = new BufferedInputStream( Thread.currentThread().getClass().getResourceAsStream(fileName));
int byteRead = bis.read(data, 0, 10000);
img = Toolkit.getDefaultToolkit().createImage(data);
return img;
}
我希望程序接受相关图像文件的名称,并返回一个Image对象。图像文件位于项目的类路径上,并且应该可见。
答案 0 :(得分:0)
好的。事实证明,这样的方法有两个要求:一个,您必须调用“ thisClassName.class.getResourceAsStream(fileName)”。就是这样您还需要以'/'开头fileName,否则它将完全无法使用。但是,只要您要查找的资源包含在程序的类路径中,它就应该从那里开始工作。