Maven/Gradle项目加载图片报input==null异常求助
问题排查与解决方案
这个问题我碰到过好多次,核心原因是Maven/Gradle的资源文件打包规则和NetBeans默认的普通Java项目不一样,导致你的图片资源没有被正确打包到类路径中,所以getResource()返回null,触发了IllegalArgumentException。
为什么NetBeans能正常运行?
NetBeans的普通Java项目会把src目录下的所有文件(不管是不是Java文件)都直接放到类路径里,所以你的images目录能被正确识别。但Maven/Gradle遵循“约定优于配置”的原则,默认只会把src/main/resources目录下的文件打包到类路径的根目录,其他目录的非Java文件会被忽略。
解决方案(按推荐程度排序)
1. 调整资源目录结构(最推荐)
把你的images文件夹移动到src/main/resources目录下,这样Maven/Gradle会自动把它打包到classpath根目录,你的现有代码getResource("/images/1.jpg")不需要任何修改就能正常工作。
2. 修改构建工具配置,强制打包指定目录
如果不想移动目录,可以修改Maven或Gradle的配置,让它们把images目录当成资源目录处理:
- Maven(修改pom.xml):
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>images/**/*</include> </includes> </resource> </resources> </build> - Gradle(修改build.gradle):
sourceSets { main { resources { srcDirs += 'src/main/java' includes += 'images/**/*' } } }
3. 验证资源是否被正确打包
修改后,你可以检查项目构建后的目录:
- Maven:查看
target/classes目录下是否有images/1.jpg - Gradle:查看
build/classes/java/main目录下是否有images/1.jpg
如果文件存在,说明资源打包正常,代码就能正确加载图片了。
内容的提问来源于stack exchange,提问作者TheTeemoMan
相关产品推荐
相关产品推荐

