两个public Java类无法互相访问问题求助(libGDX场景)
这种问题我在libGDX开发中也碰到过几次,大概率是以下几个常见原因之一,你可以逐一排查:
包路径与导入问题
如果Controller类和MainClass不在同一个包下,你必须在MainClass顶部手动导入Controller的包路径。比如Controller位于com.yourgame.controller包下,那MainClass里需要添加:import com.yourgame.controller.Controller;同时要检查两个类文件顶部的
package声明是否正确,避免包路径拼写错误。IDE缓存或构建缓存过期
IDE的缓存偶尔会出现“脑抽”情况,明明类存在却识别不了。你可以试试:- 如果你用IntelliJ IDEA:点击
File -> Invalidate Caches...,选择Invalidate and Restart,重启后IDE会重新索引项目。 - 如果你用Eclipse:点击
Project -> Clean,选择你的项目后执行清理,再重新构建。 - 作为补充,libGDX用Gradle构建,你也可以在项目根目录的终端执行命令清理构建缓存:
# Windows系统 gradlew.bat clean build # Mac/Linux系统 ./gradlew clean build
- 如果你用IntelliJ IDEA:点击
类文件放置位置错误
确认Controller类是不是放在libGDX项目的源码目录下,比如核心模块(core)的src/main/java路径下。如果放在资源目录(比如assets)或者其他非源码目录,Gradle不会编译这个类,自然无法被MainClass找到。同时检查IDE里的项目结构,确保源码目录被正确标记(IntelliJ里是蓝色文件夹,Eclipse里是Source Folder)。大小写或拼写错误
Java是大小写敏感的语言,仔细核对MainClass中创建实例的代码:是不是写成了new controller()(小写开头),或者把Controller拼写成了Controler这类错误?哪怕一个字母的差异都会导致IDE提示“Cannot resolve symbol”。模块依赖问题
如果Controller类是放在libGDX的其他模块(比如desktop模块),而MainClass在core模块,那core模块默认是无法引用desktop模块的类的——因为libGDX的依赖关系是core被其他模块依赖,反向不行。这种情况你需要把Controller移到core模块,或者在core中定义接口,让desktop模块的类实现该接口来解耦。
内容的提问来源于stack exchange,提问作者user8520631

