web-dev-qa-db-ja.com

cmdからパッケージの一部である.classファイルを実行する方法は?

.classpackageの一部にし、cmdから実行しようとすると、エラーが発生し続けます。

javacを使用してからJavaを使用した後に機能するコードを次に示します。

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

そして、動作しないコード:

package com;

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

コマンドJava HelloWorldを使用してプログラムを実行しようとすると、このエラーが表示されます。

Exception in thread "main" Java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/HelloWorld)
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(Unknown Source)
    at Java.security.SecureClassLoader.defineClass(Unknown Source)
    at Java.net.URLClassLoader.defineClass(Unknown Source)
    at Java.net.URLClassLoader.access$100(Unknown Source)
    at Java.net.URLClassLoader$1.run(Unknown Source)
    at Java.net.URLClassLoader$1.run(Unknown Source)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

これまでにやったことは次のとおりです。

Java -cp . HelloWorld
Java -cp . com.HelloWorld
Java -cp . com/HelloWorld
Java HelloWorld
Java com.HelloWorld
Java com/HelloWorld

javacはエラーなしで戻り、package com;を削除するだけで問題が解決することに注意してください。他のシナリオでは、メインクラスファイルが見つからない、またはそれらの行に沿って何かが見つからないというエラーが表示されることがあります。

何が間違っていますか?

36
user2666594

cd C:/projectsおよびHelloWorld.classC:/projects/com、次に入力するだけです:

Java com.HelloWorld
31
sgbj

パッケージは、ファイルの予想されるディレクトリの場所に直接関連しています。

つまり、comのパッケージディレクティブを持つソースファイルがある場合、そのファイルはcomディレクトリに存在することが予想されます。

HelloWorldの例では、HelloWorld.Javaファイルはcom\HelloWorld.Javaのようなcomディレクトリに保存されることが期待されます。

ファイルをコンパイルすると、HelloWorld.classなどのcomディレクトリにcom\HelloWorld.classというクラスファイルが作成されます

この方法では、Javaがcom.HelloWorldクラスを探しに行くとき、実際にクラスパスを検索し、クラスファイルが見つかるか実行されるまでcom\HelloWorld.classを追加します。クラスパス外

そこで、HelloWorld.Java(パッケージ付き)の例をC:\Java\com\HelloWord.Javaにコピーしました

コマンドラインから、C:\Javaディレクトリに変更しました...

C:\Java>dir com
 Volume in drive C is OS
 Volume Serial Number is ####-####

 Directory of C:\Java\com

09/08/2013  01:55 PM    <DIR>          .
09/08/2013  01:55 PM    <DIR>          ..
09/08/2013  01:55 PM               135 HelloWorld.Java

それからHelloWorld.Javaをコンパイルしました

C:\Java>javac com\HelloWorld.Java

それから私はそれを実行しました...

C:\Java>Java com.HelloWorld
Hello World!

Packages チュートリアルを読んでみたいと思うかもしれません

14
MadProgrammer

構文は次のとおりです。

Java -classpath /path/to/package-folder <packageName>.<MainClassName>

試してみてください:Java com.HelloWorldこれはcom/HelloWorld.classファイルは、デフォルトでクラスパスとして存在し、現在のディレクトリを指します(指定されていない場合)。

別のフォルダーにいる場合は、classpathを指定してみてください。

$ CLASSPATH=/path/to/package-folder/ Java com.HelloWorld
Hello World!
$ Java -cp /path/to/package-folder/ com.HelloWorld
Hello World!
$ cd /path/to/package-folder/ && Java com.HelloWorld
Hello World!

詳細については、次を確認してください。 実行方法Java .class files?

4
kenorb

comディレクトリの親ディレクトリからプログラムを実行します。

Java com.HelloWorld
3
Ankur Shanbhag

ファイルがC:/ projects/com/HelloWorldにあるとします。次の方法を試すことができます。

1 .Java -cp c:/projects com.HelloWorld

2 .cd c:/projects
Java com.HelloWorld
(例2は、Javaプロセスなど、多くの状況で機能しません。)

パッケージ宣言がなく、少しの変更がある場合。

1 .Java -cp c:/projects/com HelloWorld

2 .cd c:/projects/com
Java HelloWorld
(同じ理由で良くない。)

または、相対パスは問題ありませんが、ある程度のリスクがあります。最後に、cmdの最後にクラスファイルを置いてください。

2
gogog

Javaコードをコンパイルするとき、-dを使用します。この場合、

javac -d . com.HelloWorld.Java

上記のコマンドの後、Javaコンパイラーは「com」という名前のフォルダーを生成し、「com」フォルダーの下に、HelloWorld.classが表示されます。

次に、javacを実行するのと同じフォルダーで、次のコマンドを実行します

Java com.HelloWorld
2
Robin

「* .class」ファイルのフォルダから「Java」コマンドを直接実行している場合、このような問題が発生する可能性があります。このコマンドは、プロジェクトの「親」ディレクトリから実行する必要があります。すべては、次の記事で詳しく説明されています。

http://javarevisited.blogspot.de/2015/04/error-could-not-find-or-load-main-class-helloworld-Java.html

1
Krystian

Java folderの下にcomという名前のフォルダーを作成し、HelloWorld.Javacomフォルダーに入れます。その後、javacJavaを再度実行します。

1
ihsan kocak

絶対ディレクトリを使用するか、HelloWorld.classを..\last_directory\comに配置してください。

1. Java -cp .......\last_directory com.HelloWorld
2. Java -cp .......\last_directory HelloWorld(with created com)
0
Eldar

Java class、バイナリ(jar)ファイルからクラスまたはメインプログラムを実行する場合は-cpが必要です。コマンドからメインプログラムを実行する場合は、-cpフラグを実行する必要はありません。 Javaファイル、ex。

home/user/foo Java com.test.className   

here classNmae class file and exist under home/user/foo/com/test

それが役に立てば幸い。

0
Pravin