java - IOException : StreamClosed Without Apparent Cause

标签 java bufferedinputstream

我已经用 Java 创建了一个程序,我想将其打包到可执行 jar 文件中。我希望这个程序从 jar 文件中获取图像并显示它们。我创建了一个抽象类,其中包含一个获取字符串文件名并返回图像对象的方法。但是,当我尝试运行此方法时,它失败并产生“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 对象。图像文件位于项目的类路径上,并且应该可见。

最佳答案

好的。事实证明,这样的方法有两个要求:一是必须调用“thisClassName.class.getResourceAsStream(fileName)”。正是这样。您还需要让您的文件名以“/”开头,否则它将完全不起作用。但是,只要您正在寻找的资源包含在程序的类路径中,它应该从那里开始工作。

关于java - IOException : StreamClosed Without Apparent Cause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776054/

相关文章:

java - isCopy 字段在 android 中总是必需的吗?

java - 从 FileInputStream 到 BufferedInputStream 的转换

java - 查询InputStream "System.in"

java - 获取用户输入并存储到文件中的数组

java - FileInputStream 找不到文件

Java - 将 DataInputStream 与套接字一起使用,缓冲与否?

java - HashMap 以非连续顺序返回值

java - 存储与应用程序捆绑的静态数据的最佳方式?

java - 通过 MainActivity.java 设置我的 textView 的问题

java - 何时使用 SwingUtilities.invokeAndWait/invokeLater