2013-08-09 9 views
22

Ich bekomme immer Fehler, wenn ich meine Klasse Teil eines Pakets mache und versuche, es von cmd auszuführen.Wie führe ich eine .class-Datei aus, die Teil eines Pakets von cmd ist?

Hier ist der Code, der nach der Verwendung von javac und dann java funktioniert:

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

und dann der Code, der nicht funktioniert:

package com; 

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

gibt mir diesen Fehler nach dem Versuch, „java Helloworld läuft „:

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) 

Hier ist, was ich versucht habe, so weit zu tun:

java -cp . HelloWorld 
java -cp . com.HelloWorld 
java -cp . com/HelloWorld 
java HelloWorld 
java com.HelloWorld 
java com/HelloWorld 

Denken Sie daran, dass javac ohne Fehler zurückkehrt und dass einfach "package com;" löst das Problem. Manchmal in anderen Szenarien bekomme ich einen Fehler, der sagt, dass die Hauptklassendatei nicht gefunden werden kann oder etwas in diesen Zeilen.

Was mache ich falsch?

+1

Wo lebt 'HelloWord'? Leben sie im 'com /' Verzeichnis? – MadProgrammer

+0

Ich glaube, du hast den Ordner "com" nicht. –

+0

Es lebt in einem von mir erstellten Verzeichnis C: \ java, in dem sich HelloWorld.java und HelloWorld.class befinden. –

Antwort

24

Angenommen, Sie haben zu C cd'd:/Projekte und HelloWorld.class ist in C:/projects/com, geben Sie einfach

java com.HelloWorld 
+0

Die Datei befindet sich jetzt in C: \ com. Wenn ich deinen Befehl ausprobiere, heißt es: –

+0

Fehler: COuld nicht finden oder laden Hauptklasse com.HelloWorld –

+3

An diesem Punkt müssen Sie in C: \, nicht C: \ com. Mit anderen Worten, Sie müssen versuchen, es von außerhalb des Paketverzeichnisses auszuführen. – sgbj

13

Pakete werden direkt auf die erwartete Verzeichnis Speicherort der Datei im Zusammenhang . Wenn Sie eine Quelldatei mit der Paketdirektive com haben, wird erwartet, dass die Datei im Verzeichnis com gespeichert wird.

In Ihrem HelloWorld Beispiel würde man erwarten, dass die HelloWorld.java Datei im com Verzeichnis gespeichert werden würde, wie com\HelloWorld.java

Wenn Sie die Datei kompilieren, es wird eine Klassendatei HelloWorld.class im com Verzeichnis mit dem Namen erstellen, wie com\HelloWorld.class

diese Weise, wenn Java für die com.HelloWorld Klasse geht suchen, wäre es eigentlich ist es Classpath werden die Suche und com\HelloWorld.class ihm anhängt, bis es Ihre Klassendatei findet oder läuft aus Classpath

Beispiel

Also kopierte ich Ihre HelloWorld.java (mit Paket) Beispiel C:\java\com\HelloWord.java

in der Befehlszeile, ich zum C:\java Verzeichnis geändert ...

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 

Dann habe ich kompiliert die HelloWorld.java

Dann lief ich es ...

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

Vielleicht möchten Sie ein Packages durch Tutorial

+0

Die Datei lebt jetzt in C: \ com. Das Problem ist dasselbe, wenn ich "java HelloWorld" verwende und wenn ich "java com.HelloWorld" wie @sbat versuche, kann ich die Hauptklasse nicht finden oder laden. –

+0

Okay. Hast du mein Beispiel versucht? Sie können 'C: \ java \ com' für' C: \ com' ersetzen, weil, wie ich gezeigt habe, es gut funktioniert ... – MadProgrammer

+0

gibt es einen Tippfehler. Du meintest live zu sagen, aber sagte das Leben – user763410

0

Versuchen gelesen haben absolute Verzeichnis zu verwenden oder Ihre HelloWorld.class setzen in .. \ last_directory \ com

1. java -cp .......\last_directory com.HelloWorld 
2. java -cp .......\last_directory HelloWorld(with created com) 
3

Run das Programm aus dem übergeordneten Verzeichnis des Verzeichnisses com.

java com.HelloWorld 
+0

ohh ja. mein Fehler. Danke, dass du es aufgezeigt hast. –

+0

Dies ist die sehr wahrheitsgemäße Antwort auf diese Frage !!!!!!!! – hyprfrcb

0

Erstellen Sie einen Ordner com unter Java Ordner mit dem Namen und der HelloWorld.java in com Ordner. Führen Sie dann erneut javac und java.

0

Sie es zuerst, indem Sie diesen Befehl in CMD, für exemple Ihre Datei kompilieren sollte, ist in c: \ Verzeichnis:

c:\com>java HelloWorld 
2
:

C:\com>javac HelloWorld.java 

Danach können Sie das Ergebnis, indem Sie ausführen können

Die Syntax ist:

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

So können Sie versuchen: java com.HelloWorld dieerwartenDatei, die standardmäßig als Klassenpfad angezeigt werden soll, verweist auf das aktuelle Verzeichnis (falls nicht angegeben).

Falls Sie in anderen Ordner sind, versuchen classpath Angabe:

$ 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! 

Zur weiteren Erläuterung überprüfen: How do I run Java .class files?

0

Sie benötigen keine -cp Flagge benötigen, während eine Java-Klasse läuft , -cp wird beim Ausführen einer Klasse oder eines Hauptprogramms aus einer Binärdatei (jar) benötigt. Beim Ausführen eines Hauptprogramms über eine Befehlszeile müssen Sie sicherstellen, dass Sie die Klasse in der gleichen Ordnerstruktur wie der Paketname in der Java-Datei haben, z.

home/user/foo java com.test.className 

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

hoffe es hilft.

0

Wenn Sie den Java-Code kompilieren, verwenden -d, in Ihrem Fall, es

javac -d . com.HelloWorld.java 

Nach dem obigen Befehl wäre, Java-Compiler Generiere einen Ordner namens "com", unter dem Ordner "com" siehst du deine HelloWorld.

Klasse

dann unter dem gleichen Ordner wie Sie javac ausführen, führen Sie den folgenden Befehl

java com.HelloWorld 
1

Angenommen, die Datei in C lokalisiert:/projects/com/Hello World und Sie können die folgenden Möglichkeiten versuchen.

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

2. cd c:/projects
  java com.HelloWorld

, wenn es keine Erklärung Paket ist, und es wird eine kleine Änderung sein.

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

2. cd c:/projects/com
  java HelloWorld

alternativ wird relativer Pfad in Ordnung sein.