从方法返回StretchIcon类失效报错,直接实例化却正常的问题排查
问题分析:直接实例化
StretchIcon正常,但静态方法返回时编译报错 你遇到的这个问题确实有点费解——明明直接写new StretchIcon(imageStr);能正常运行,但通过下面这个静态方法返回实例就触发了编译错误:
public static ImageIcon getPhotoSI(String imageStr){ return new StretchIcon(imageStr); }
报错信息如下:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - Erroneous ctor sym type: library.StretchIcon.
at library.IImage.getPhotoSI(IImage.java:36) at Users.populateTable(Users.java:448) at FrmUsers.btnSearch_ActionPerformed(FrmUsers.java:455) at FrmUsers.access$600(FrmUsers.java:18)
结合报错信息和场景,我整理了几个最可能的原因,你可以逐一排查:
- 导入的
StretchIcon类不一致:仔细检查IImage.java文件里的StretchIcon导入语句,和你直接实例化StretchIcon的文件里的导入做对比。很可能在IImage类里不小心导入了其他包下的同名StretchIcon类,而那个类并没有接受String参数的构造器,导致编译器找不到对应的构造方法。 - 项目编译缓存或未完全编译:有时候IDE的自动编译会“偷懒”,比如
StretchIcon类更新了,但IImage类没有重新编译,或者编译目录里残留了旧的类文件。你可以手动清理项目的编译输出目录(比如Eclipse的bin、Maven的target),然后重新编译整个项目试试。 StretchIcon构造器的访问权限问题:确认StretchIcon的String参数构造器是public修饰的。如果构造器是默认的包访问权限,而IImage类不在同一个包下,虽然有些IDE可能因为缓存暂时让直接实例化通过,但静态方法里的调用会触发严格的编译检查,导致报错。- IDE缓存异常:这种情况在Eclipse这类IDE里偶尔会出现——明明代码没问题,但就是报编译错误。试试重启IDE,或者刷新项目、重新同步依赖,大概率能解决这种“幽灵”错误。
如果排查完上面几点还是没解决,你可以再检查下StretchIcon类是否确实继承了ImageIcon,以及IImage类的返回类型是否和构造实例的类型匹配(不过从你的代码看这部分应该没问题)。
内容的提问来源于stack exchange,提问作者Karlo Kokkak
相关产品推荐
相关产品推荐

