VS Code中Java程序仅能Debug运行,常规编译报错求助
问题:终端编译Java代码找不到Board类,但Debug模式正常运行
编译错误信息
PS C:\Users\blake\Desktop\javavscode\BattleShip> javac Main.java Main.java:10: error: cannot find symbol Board board = new Board(input); ^ symbol: class Board location: class Main Main.java:10: error: cannot find symbol Board board = new Board(input); ^ symbol: class Board location: class Main
代码内容
Main.java
package BattleShip; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("What size do you want the board to be?: "); int input = Integer.valueOf(scanner.nextLine()); Board board = new Board(input); board.print(); } }
Board.java
package BattleShip; public class Board { private char[][] board; private char water = '~'; private int size; public Board(int size){ this.size = size; this.board = new char[size][size]; for (int i = 0; i < board.length; i++){ for (int j = 0; j < board.length; j++){ board[i][j] = water; } } } public void print(){ for (int i = 0; i < board.length; i++){ for (int j = 0; j < board.length; j++){ System.out.print(board[i][j] + " "); } System.out.println(""); } } }
VS Code Debug运行命令
PS C:\Users\blake\Desktop\javavscode\BattleShip> c:; cd 'c:\Users\blake\Desktop\javavscode'; & 'C:\Users\blake\AppData\Local\Programs\Eclipse Adoptium\jdk-17.0.7.7-hotspot\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '-cp' 'C:\Users\blake\AppData\Roaming\Code\User\workspaceStorage\b656ed2f78ffde906270d9c291aeeeb0\redhat.java\jdt_ws\javavscode_a7ed4f9c\bin' 'BattleShip.Main' What size do you want the board to be?:
疑问
目录中已生成Board.class和Main.class文件,请问是否需要使用这些文件运行程序?
解决办法
问题根源
你用了package BattleShip;声明包结构,但终端直接执行javac Main.java时,编译器只会编译Main.java,找不到同包的Board类(Board.java也需要编译,且文件要放在对应包目录下)。VS Code的Debug模式自动帮你处理了包结构和类路径,所以能正常运行。
正确编译与运行步骤
- 确认目录结构:把Main.java和Board.java放在名为
BattleShip的文件夹下(包名和文件夹名必须一致),上级目录是C:\Users\blake\Desktop\javavscode。 - 编译代码:打开终端,切换到上级目录(
cd C:\Users\blake\Desktop\javavscode),执行命令:
这会同时编译两个类,生成的javac BattleShip/*.java.class文件会自动放在BattleShip文件夹里。 - 运行程序:同样在上级目录,执行:
java BattleShip.Main
关于已生成的.class文件
如果已经有Board.class和Main.class,只要它们在BattleShip文件夹下,直接在上级目录执行上面的java BattleShip.Main命令就能运行,不需要重新编译。别在BattleShip目录下运行,否则类路径会出错。
内容的提问来源于stack exchange,提问作者NATCHY
相关产品推荐
相关产品推荐

