Java命令行编译

Java命令行编译,java,command-line,compilation,terminal,Java,Command Line,Compilation,Terminal,我最近用Netbeans和Java完成了一项编程任务。当我在Netbeans中运行该程序时,一切都运行得非常完美。当我尝试从终端运行它时,我的问题出现了。我用所有的.java文件运行javac,它为每个文件生成一个.class文件。然后,当我尝试运行可执行文件时,它会在我身上出错 ls Board.java KenKenPuzzleSolver.java Solver.java Cage.java Size.java Values.jav

我最近用Netbeans和Java完成了一项编程任务。当我在Netbeans中运行该程序时,一切都运行得非常完美。当我尝试从终端运行它时,我的问题出现了。我用所有的.java文件运行javac,它为每个文件生成一个.class文件。然后,当我尝试运行可执行文件时,它会在我身上出错

ls
Board.java          KenKenPuzzleSolver.java 
Solver.java         Cage.java 
Size.java           Values.java

javac KenKenPuzzleSolver.java Board.java Cage.java Size.java Solver.java Values.java

ls
Board.class         Size.class
Board.java          Size.java
Cage.class          Solver.class
Cage.java           Solver.java
KenKenPuzzleSolver.class    Values.class
KenKenPuzzleSolver.java     Values.java

java KenKenPuzzleSolver
Exception in thread "main" java.lang.NoClassDefFoundError: KenKenPuzzleSolver (wrong name: kenkenpuzzlesolver/KenKenPuzzleSolver)

此外,当程序从终端运行时,它应该接收一个输入文件和一个输出文件的名称,即“java kenpuzzlesolver input.txt output.txt”,我不太确定如何执行此操作。

为什么不使用netbeans生成一个可执行文件?您不必每次都编译代码


input.txt
output.txt
称为参数。它们将存储在
main
函数中的
String[]args
数组中。

您没有提供classpath参数


使用
javac-cp YOURCLASSPATH KenKenPuzzleSolver

运行的类应该是公共的,并且应该具有与文件名相同的类名。您的文件名似乎是“KenPuzzleSolver”,但您的类名似乎是“KenPuzzleSolver”(注意小写的ken)。更正该错误,然后重新编译并重新运行。

您一定弄乱了案例,从错误中可以看出,它显然不是
KenKenPuzzleSolver
您已在
KenKenPuzzleSolver.java

中将类命名为
kenpuzzlesolver
。请阅读更多有关
CLASSPATH
的角色和
静态main
方法的参数的信息。有关
javac
的更多信息,请输入
manjavac
。阅读它,它很可能会解决您的问题。您遇到了一个程序包问题,您的KenPuzzleSolver似乎实际上是KenPuzzleSolver。KenPuzzleSolver(程序包内)检查您的程序包声明,如果是,您需要落后一个目录并执行
javakenpuzzlesolver.kenkenpuzzlesolver