0

我想从我开始使用批处理文件的命令行运行一个 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   
    }
}
4

6 回答 6

3

以下语句解决了我的错误:

java -cp bin; main.Main
于 2013-01-31T13:17:15.127 回答
2

NoClassDefFoundError当 Java 虚拟机无法在运行时找到在编译期间可用的特定类时,Java 就出现了。

例如,如果我们有一个类的方法调用或访问一个类的任何静态成员,并且该类在运行时不可用,那么 JVM 将抛出NoClassDefFoundError.

默认情况下,JavaCLASSPATH指向用“.”表示的当前目录。它只会在当前目录中查找任何类。

因此,您需要CLASSPATH在运行时添加其他路径。阅读更多设置类路径

java -cp bin main.Main

其中Main.class包含public static void main(String []arg)

于 2013-01-31T12:19:31.660 回答
1

你错误地执行 java bin\main.main

main() 是您的主要方法,但您应该提供Class Name实现 main()的 java 解释器

所以如果你的类名是 Test 并且文件名是 Test.java 它有 main() 方法

java Test

如果您的 Test.java/Test 类是包 my.test 例如 -package com.my.test;

比,java com.my.test.Test

希望你明白了!

于 2013-01-31T12:20:15.683 回答
1

java bin/main.Main是错误的,您必须-cp在此处指定:

java main.Main -cp bin

这里的第一个参数是应该在类路径中找到的类名,而不是类文件位置。并且-cp只需将逻辑路径添加到类路径。您应该使项目的根目录在类路径中可搜索。

对于那些 javac 命令,您已经指定了正确的路径,因此您不需要-cp src. 这里的区别是 javac 命令使用.java文件的逻辑路径,而使用 java 命令只能在-cp属性中指定路径。

如果您进入目录,您也可以java main.Main不执行:-cpbin

cd bin
java main.Main

由于当前路径将被 java 自动搜索为类路径。

于 2013-01-31T15:20:41.003 回答
0

假设您有一个名为 Main 的类,您必须使用以下命令运行它:

java bin\Main

它将调用您的主要方法。

于 2013-01-31T12:18:28.523 回答
0

Java 运行时(在您的情况下为 java.exe 命令)将包含 main() 方法的类文件名作为输入。我猜你应该将它调用为“java bin\main”,假设有一个 main.class 定义了一个 public static void main (String[]) 方法。

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

于 2013-01-31T12:24:35.437 回答