我想从命令行运行一个Java项目,我开始使用批处理文件,但是我得到了错误的名称错误。
目录设置:
批处理文件:
set path=C:\Program Files\Java\jdk1.7.0_09\bin
javac src\model\*.java -d bin -cp src
javac src\controller\*.java -d bin -cp src
javac src\view\*.java -d bin -cp src
javac src\main\*.java -d bin -cp src
PAUSE
java bin\main.Main
PAUSE
编译工作,但我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: bin\main/Main (wrong name: main/Main)
有什么建议吗?
package main;
// omitted imports
public class Main {
// omitted variables
public static void main(String[] args) {
// omitted implementation
}
}
答案 0 :(得分:3)
以下声明解决了我的错误:
java -cp bin; main.Main
答案 1 :(得分:2)
NoClassDefFoundError
是在Java虚拟机无法在运行时找到特定类时编译的。
例如,如果我们从类中调用方法或访问类的任何静态成员,并且该类在运行时不可用,那么JVM将抛出NoClassDefFoundError
。
默认情况下,Java CLASSPATH
指向由"表示的当前目录。"它只会在当前目录中查找任何类。
因此,您需要在运行时向CLASSPATH
添加其他路径。阅读更多Setting the classpath
java -cp bin main.Main
其中Main.class
包含public static void main(String []arg)
答案 2 :(得分:1)
你错误地将java bin \ main.main
排除在外 main()是你的主要方法,但你应该提供java解释器Class Name
实现main()
因此,如果您的类名是Test,则文件名是Test.java,其中包含main()方法
java Test
如果您的Test.java/Test类是包my.test例如 - package com.my.test;
,java com.my.test.Test
答案 3 :(得分:1)
java bin/main.Main
错误,您必须在此处指定-cp
:
java main.Main -cp bin
这里的第一个参数是类名,它应该在类路径中找到,而不是类文件位置。而-cp
只是添加了类路径的逻辑路径。您应该在类路径中搜索项目的根目录。
对于那些javac命令,您已经指定了正确的路径,因此您不需要-cp src
。这里的区别是javac命令使用.java
文件的逻辑路径,而使用java命令时,您只能在-cp
属性中指定路径。
如果您输入目录java main.Main
,也可以在没有-cp
的情况下执行bin
:
cd bin
java main.Main
由于当前路径将被java自动搜索为类路径。
答案 4 :(得分:0)
假设您有一个名为Main的类,则必须使用以下命令运行它:
java bin\Main
它将调用您的主要方法。
答案 5 :(得分:0)
Java运行时(在您的情况下是java.exe命令),将包含main()方法的类文件名作为输入。假设有一个main.class定义了一个public static void main(String [])方法,我想你应该把它调用为“java bin \ main”。
注意:一般做法是大写任何类名的第一个文字。