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

NoClassDefFoundErrorin 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間違っている場合は、-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 に答える
1

java bin\main.main を誤って実行しています

main() はメイン メソッドですが、Class Namemain() を実装する Java インタープリターを提供する必要があります。

したがって、クラス名が Test で、ファイル名が main() メソッドを持つ Test.java の場合

java Test

あなたの Test.java/Test クラスがパッケージ my.test の場合 -package com.my.test;

よりも、java com.my.test.Test

あなたがそれを得たことを願っています!!

于 2013-01-31T12:20:15.683 に答える
0

Javaランタイム(この場合はjava.exeコマンド)は、main()メソッドを含むクラスファイル名を入力として受け取ります。public static void main(String [])メソッドが定義されているmain.classがあると仮定して、「javabin\main」として呼び出す必要があると思います。

注:一般的な方法は、クラス名の最初のリテラルを大文字にすることです。

于 2013-01-31T12:24:35.437 に答える
0

Main というクラスがあると仮定すると、次のコマンドで実行する必要があります。

java bin\Main

メインメソッドが呼び出されます。

于 2013-01-31T12:18:28.523 に答える