Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ImageIO声明图像_Java_Javax.imageio_Paint.net - Fatal编程技术网

Java ImageIO声明图像

Java ImageIO声明图像,java,javax.imageio,paint.net,Java,Javax.imageio,Paint.net,我正在开发一个每隔一段时间重新加载一个图像的应用程序。 我这样做是为了在外出途中做出改变。我正在使用ImageIO.read(path)读取图像文件 现在,当我想用paint.NET更改图像并尝试保存(覆盖)图像时,paint.NET抛出IOException。这可能是因为ImageIO只是在进程运行时声明图像是他的。但我就是这么想的 代码如下: public int width, height; public int[] pixels; public Sprite(String ref) {

我正在开发一个每隔一段时间重新加载一个图像的应用程序。 我这样做是为了在外出途中做出改变。我正在使用ImageIO.read(path)读取图像文件

现在,当我想用paint.NET更改图像并尝试保存(覆盖)图像时,paint.NET抛出IOException。这可能是因为ImageIO只是在进程运行时声明图像是他的。但我就是这么想的

代码如下:

public int width, height;
public int[] pixels;

public Sprite(String ref) {
    try {
        BufferedImage image = ImageIO.read(new FileInputStream(ref));
        width = image.getWidth();
        height = image.getHeight();
        pixels = new int[width * height];
        pixels = image.getRGB(0, 0, width, height, pixels, 0, width);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
有人知道怎么解决这个问题吗

谢谢

在Windows上(我假设您使用的是Windows,正如您提到的,您使用的是Paint.NET),保留一个文件尤其有问题,因为它会阻止其他应用程序写入同一个文件。很可能,这就是您遇到的问题

当您打开一条流时,就像您在这里所做的那样:

new FileInputStream(ref);
您可以获取本机文件指针。您有责任在使用后再次关闭它,以释放文件指针。现在,
ImageIO.read(InputStream)
应该为您关闭流,但是在某些情况下和某些版本的Java中,存在与此相关的bug。如果流没有正确关闭,Java进程将保留此文件指针,这是最坏的情况,直到Java进程终止

好消息是,如果您只需将代码更改为:

BufferedImage image = ImageIO.read(new File(ref));

然后,
ImageIO
将始终负责流的打开和关闭。

哪个操作系统?它似乎有相当多的bug,这些bug仅适用于针对OSX和Linux的Java7,看起来,可能不相关。我认为这个问题的解决方案实际上是微不足道的,请参见下面的答案。
ImageIO.read(新文件(ref))
工作正常,谢谢!read(新文件(ref))对我不起作用,我在osx上