gpt4 book ai didi

java - ImageIO.write 何时以及如何抛出 nullpointerexception?

转载 作者:行者123 更新时间:2023-11-30 11:18:13 28 4
gpt4 key购买 nike

ImageIO.write(RenderedImage,String,File)

方法,ImageOutputStream是通过

创建的

stream = createImageOutputStream(output);.

createImageOutputStream 中捕获运行时异常并从 catch block 返回 null。

try {
iter = theRegistry.getServiceProviders(ImageOutputStreamSpi.class,true);
} catch (IllegalArgumentException e) {
return null;
}

谁能帮我理解:

  1. 这里捕获运行时异常的原因是什么?(除非是蹩脚的编码)
  2. 在什么情况下,代码会抛出非法参数异常? (我看不出它有任何抛出的理由)

请帮忙。

最佳答案

这可能是代码随时间演变而没有人愿意清理的情况,也可能是 ImageIO 的实现者依赖ServiceRegistry的契约(Contract),而不是它的实现细节。在当前执行 ImageIOServiceRegistry我不明白这怎么可能发生。

我能看到的唯一好处是,您现在可以潜在地更改 IIORegistry 的实现。或 ServiceRegistry例如,延迟加载类别,或者可能在没有服务提供者 (Spi) 的情况下清除类别。方法的契约不会被破坏,ImageIO类仍然会像以前一样工作。

现在,回到你问题中的问题,答案是它永远不应该抛出 NullPointerException . *

如果你真的想要,你可以获得stream成为null , 通过为 File 注销 Spi (FileImageOutputStreamSpi)。但即便如此,一个乖巧的ImageWriter应该抛出 IllegalStateException表明尚未设置输出,不是 NullPointerException (当然,编程错误可能会导致其他地方出现NPE,但这不是正常流程)。

更新:

*) 正如 OP 自己在链接答案中指出的那样,抛出 NullPointerException如果你通过 File 确实会发生指向不存在路径的对象。发生这种情况是因为 FileImageOutputStreamSpi “吞下”IOExceptionRandomAccessFile 引起构造函数(它确实将堆栈跟踪打印到标准输出),并返回 null .在我看来,这比让 IOException 更严重地破坏了契约(Contract)。起泡,或将其包裹在 IllegalArgumentException 中以原始异常为原因和一些解释性信息。考虑提交错误报告,如果此问题尚不存在的话。

关于java - ImageIO.write 何时以及如何抛出 nullpointerexception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com