从命令行运行,错误名称错误

时间:2013-01-31 12:14:34

标签: java command-line javac

我想从命令行运行一个Java项目,我开始使用批处理文件,但是我得到了错误的名称错误。

目录设置:

  • srcMVC
    • bin(带.class文件的文件夹)
    • src(带.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   
    }
}

6 个答案:

答案 0 :(得分:3)

以下声明解决了我的错误:

java -cp bin; main.Main

答案 1 :(得分:2)

Java中的

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”。

注意:一般做法是大写任何类名的第一个文字。