Java控制台编译报cannot find symbol,IDE运行正常的问题求助
控制台执行Java代码提示
error: cannot find symbol,IDE中可正常运行 问题详情
- 执行
java Jukebox1.java时提示找不到MockSongs类 - 尝试删除
package day14语句后问题仍存在 - IntelliJ IDEA和Visual Studio Code均可正常识别
MockSongs类 - 使用Java版本:openjdk 17.0.7
代码文件
MockSongs.java
package day14; import java.util.*; public class MockSongs { public static List<String> getSongsStrings() { List<String> songs = new ArrayList<>(); songs.add("somersault"); songs.add("cassidy"); songs.add("$10"); songs.add("havana"); songs.add("Cassidy"); songs.add("50 ways"); return songs; } }
Jukebox1.java
package day14; import java.util.*; public class Jukebox1 { public static void main(String[] args) { } public void go() { List<String> songsList = MockSongs.getSongsStrings(); System.out.println(songsList); } }
错误信息
java Jukebox1.java Jukebox1.java:11: error: cannot find symbol List<String> songsList = MockSongs.getSongsStrings(); ^ symbol: variable MockSongs location: class Jukebox1 1 error error: compilation failed
Java版本信息
openjdk 17.0.7 2023-04-18 OpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7) OpenJDK 64-Bit Server VM Temurin-17.0.7+7 (build 17.0.7+7, mixed mode)
解决方案
保留包结构的正确操作
如果要保留package day14声明:
- 创建名为
day14的目录,将两个.java文件移入该目录 - 回到
day14目录的上级路径,执行编译命令:javac day14/*.java - 运行主类(需指定完整包名):
java day14.Jukebox1
移除包声明后的操作
如果已经删除package day14,确保两个文件在同一目录下:
- 方式一:先编译依赖类,再编译运行主类
javac MockSongs.java javac Jukebox1.java && java Jukebox1 - 方式二:利用Java 11+的多文件运行特性,一次性指定所有依赖文件
java Jukebox1.java MockSongs.java
关键原因说明
控制台执行java xxx.java时,JVM仅编译指定的单个文件,不会自动扫描同目录下的其他依赖类,必须显式处理依赖关系;而IDE会自动管理编译路径和依赖,因此不会出现该问题。
内容的提问来源于stack exchange,提问作者Ricardo Antonio
相关产品推荐
相关产品推荐

