You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决创建ImageView加载JPG图片时Spotbugs检测出的UI_INHERITANCE_UNSAFE_GETRESOURCE错误

修复Spotbugs的UI_INHERITANCE_UNSAFE_GETRESOURCE警告

这个Spotbugs警告其实是在提醒你一个潜在的继承风险:当你的SlotsDisplay类被其他类继承后,子类调用getClass()会拿到子类的Class对象,而子类的类加载器可能无法找到你指定的图片资源——毕竟资源是放在父类的类路径下的,子类的类加载上下文说不定就找不到这个路径了。你右键直接运行父类的时候没问题,是因为此时getClass()就是SlotsDisplay.class,但一旦有子类继承并调用这个方法,就可能出现资源找不到的问题。

给你两个直接有效的修复方案:

方案一:用类名固定加载资源(根源解决警告)

把getClass()换成SlotsDisplay.class,这样不管有没有子类继承,都是用当前类的类加载器来加载资源,完全规避子类类加载器带来的风险。代码修改后如下:

private ImageView createImageView(String imageName){
    ImageView imageView = new ImageView(new Image(SlotsDisplay.class.getResourceAsStream("/images/cards/" + imageName + ".jpg")));
    imageView.setFitWidth(148);
    imageView.setFitHeight(210);
    return imageView;
}

方案二:结合空值检查(更健壮)

按照IntelliJ的提示加上Objects.requireNonNull,可以在资源真的找不到时抛出明确的异常,方便你调试,而不是默默出现奇怪的错误。结合方案一的话,代码会更安全:

import java.util.Objects;
import java.io.InputStream;

// ...

private ImageView createImageView(String imageName){
    String resourcePath = "/images/cards/" + imageName + ".jpg";
    InputStream imageStream = Objects.requireNonNull(
        SlotsDisplay.class.getResourceAsStream(resourcePath),
        "Failed to load image resource: " + resourcePath
    );
    ImageView imageView = new ImageView(new Image(imageStream));
    imageView.setFitWidth(148);
    imageView.setFitHeight(210);
    return imageView;
}

这样修改后,Spotbugs的警告应该就会消失了,同时也让代码的健壮性提升了不少——既解决了继承带来的资源加载风险,又能在资源路径出错时及时给出明确提示。

内容的提问来源于stack exchange,提问作者Sebastian Sole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:54:08