# Hauptklasse wird nicht gefunden



## Wuestenfuchs31 (11. Aug 2011)

Ich stehe mit meinem Java noch ganz am Anfang und versuche gerade das HelloWorld Tutorial umzusetzen.

Es klappt auch alles bis ich nach dem Kompilieren die erstellte .class datei ausführen möchte:

Gebe ich nun in CMD %java HelloWorld ein, dann bekomme ich angezeigt:"Fehler: Hauptklasse Helloworld konnte nicht gefunden oder geladen werden"

Das Kompilieren per CMD klappt wunderbar, aber nur dieser letzte Schritt leider gar nicht. Da ich nun schon einige Zeit in den Versuch der Lösung des Problems gesteckt habe, wollte ich hier nachfragen, ob jemand einen Vorschlag zur Lösung hat.


----------



## Monaria (11. Aug 2011)

Die Klasse, die du deklarierst muss "public" sein und den gleichen Namen wie die Datei haben.
Groß und Kleinschreibung sind relevant.

```
public class HelloWorld{
```


----------



## Wuestenfuchs31 (11. Aug 2011)

Monaria hat gesagt.:


> Die Klasse, die du deklarierst muss "public" sein und den gleichen Namen wie die Datei haben.
> Groß und Kleinschreibung sind relevant.
> 
> ```
> ...



Danke für die Antwort, dass habe ich auch schon erfolglos versucht. Der Code ist der folgende:

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

Beim Kompilieren gibt es seltsamerweise keine Probleme und das selbe Problem tritt auch bei anderen Java-kurz-Codes auf.

Ich habe überlegt ob es irgendwas mit den Umgebungsvariablen zu tun hat, aber die habe ich eigentlich auch richtig gesetzt.


----------



## nrg (11. Aug 2011)

das ist auch case sensitive. wenn deine Datei Helloworld.java muss auch deine Klasse Helloworld heissen

edit: seit wann gibt Java eigentlich Fehlermeldungen in Deutsch aus ? oder hast du das übersetzt?

wobei er dann eigentlich auch nicht mit 
	
	
	
	





```
java Helloworld.java
```
 kompilieren dürfte


----------



## Wuestenfuchs31 (11. Aug 2011)

nrg hat gesagt.:


> wobei er dann eigentlich auch nicht mit
> 
> 
> 
> ...



Ja das verstehe ich auch nicht....
Die Fehlermeldung wurde nicht übersetzt und erscheint so in CMD


----------



## Noctarius (11. Aug 2011)

Versuch vorher mal einen Kompilierungsvorgang
[c]javac Helloworld.java[/c]

und dann ausführen:
[c]java Helloworld[/c]


----------



## Wuestenfuchs31 (11. Aug 2011)

Noctarius hat gesagt.:


> Versuch vorher mal einen Kompilierungsvorgang
> [c]javac Helloworld.java[/c]
> 
> und dann ausführen:
> [c]java Helloworld[/c]



Genauso hab ichs ja gemacht. javac führt er ohne Probleme aus. Den Befehl java scheint er auch zu kennen. Nur wenn ich meine vorher kompillierte .class Datei mit java ausführen will geht irgendwas schief.

Obwohl ich im richtigen Verzeichnis bin scheint er die Datei nicht zu finden. Ich kann auch einen falschen Namen eingeben und bekomme die selbe Fehlermeldung.


----------



## SamHotte (11. Aug 2011)

Wie sieht denn Dein CLASSPATH aus? Die Java-Laufzeit sucht nicht von sich aus im aktuellen Verzeichnis (liegt an der Unix-Herkunft).

Dort muss entweder das Verzeichnis, in dem die HelloWorld.java liegt, drin stehen oder der "." für das jeweils aktuelle Verzeichnis.

Alternativ kannst Du auch in der Kommandozeile "java [Laufwerk]:\[Programmverzeichnis]\HelloWorld eingeben.


----------



## Wuestenfuchs31 (11. Aug 2011)

SamHotte hat gesagt.:


> Wie sieht denn Dein CLASSPATH aus? Die Java-Laufzeit sucht nicht von sich aus im aktuellen Verzeichnis (liegt an der Unix-Herkunft).
> 
> Dort muss entweder das Verzeichnis, in dem die HelloWorld.java liegt, drin stehen oder der "." für das jeweils aktuelle Verzeichnis.
> 
> Alternativ kannst Du auch in der Kommandozeile "java [Laufwerk]:\[Programmverzeichnis]\HelloWorld eingeben.



Auch wenn ich das letztere eingebe habe ich genau das selbe Problem: Kompilieren geht, aber das Ausführen nicht.


----------



## SamHotte (11. Aug 2011)

Nur zur Sicherheit:

1. In Deinem Code heißt die Klasse "HelloWorld" mit großem "W";
2. Die Datei heißt aber "Helloworld" mit kleinem "W".

Richtig? Falls ja, bitte entweder die Datei oder die Klasse umbenennen, sodass sie exakt gleich heißen.


----------



## jgh (11. Aug 2011)

Fehlersuche mal systematisch:
Du hast was für ein System?
bei der Eingabe [c]java[/c] kommt sowas ähnliches:
[xml]Verwendung: java [-options] class [args...]
           (zur Ausf³hrung einer Klasse)
   oder  java [-options] -jar jarfile [args...]
           (zur Ausf³hrung einer JAR-Datei)
wobei options Folgendes umfasst:
    -d32          Verwendet ein 32-Bit-Datenmodell, sofern verf³gbar
    -d64          Verwendet ein 64-Bit-Datenmodell, sofern verf³gbar
    -client       zur Auswahl der "client" VM
  usw...
[/xml]
und nach [c]javac HelloWorld.java[/c] erscheint in dem Verzeichnis eine HelloWorld.class datei?


----------



## Wuestenfuchs31 (11. Aug 2011)

SamHotte hat gesagt.:


> Nur zur Sicherheit:
> 
> 1. In Deinem Code heißt die Klasse "HelloWorld" mit großem "W";
> 2. Die Datei heißt aber "Helloworld" mit kleinem "W".
> ...


Nein das hat beides ein großes W im Namen also daran kanns nicht liegen



jgh hat gesagt.:


> Fehlersuche mal systematisch:
> Du hast was für ein System?
> bei der Eingabe [c]java[/c] kommt sowas ähnliches:
> [xml]Verwendung: java [-options] class [args...]
> ...



Ich hab Windows 7. Wenn ich java eingebe kommt genau das, was du hier geschrieben hast. Und wenn ich [c]javac HelloWorld.java[/c] eingebe erscheint im selben Verzeichnis die .class Datei ja.


----------



## SamHotte (11. Aug 2011)

An Windows7 kann's nicht liegen, habe es selbst gerade mal nachvollzogen. Befindest Du Dich in dem Verzeichnis, in dem die .class liegt, wenn Du java aufrufst?


----------



## Wuestenfuchs31 (11. Aug 2011)

SamHotte hat gesagt.:


> An Windows7 kann's nicht liegen, habe es selbst gerade mal nachvollzogen. Befindest Du Dich in dem Verzeichnis, in dem die .class liegt, wenn Du java aufrufst?



ja


----------



## SamHotte (11. Aug 2011)

Hmm. Mir fällt da momentan auch nichts mehr ein ... Pfad stimmt, Groß-/Kleinschreibung stimmt, JAVA-ClassPath scheint zu stimmen ... jemand anderes eine Idee?


----------



## bone2 (11. Aug 2011)

compilier mal im cmd und versuche es zu starten, mach mit dem windows snipping tool einen screenshot vom commandofenster, lad den bei imgur.com hoch udn zeig ihn her


----------



## jgh (11. Aug 2011)

ich habe das gerade per Teamviewer ausprobiert...neue java datei angelegt, per cmd compilieren lassen, er schreibt wunderbar die .class datei, trozdem findet er dann die Hauptdatei nicht, die definitiv im korrekten Ordner liegt!


----------



## Wuestenfuchs31 (11. Aug 2011)

Der Screenshot zeigt erst mein CMD Fenster und in jenem erst das erfolgreiche kompilieren und dann der Fehlschlag besagte Datei zu öffnen


----------



## Gast2 (11. Aug 2011)

du darfst nicht schreiben

```
java C:\java\HelloWorld
```
Java erwartet als Parameter nicht den Pfad zur Klasse, sondern den vollständigen Klassennamen. Die Klasse HelloWorld müsste also im package c:.java liegen, und das tut sie wohl nicht 
Wechsel ins verzeichnis c:/java und führ da dann einfach java HelloWorld aus.


----------



## Wuestenfuchs31 (11. Aug 2011)

EikeB hat gesagt.:


> du darfst nicht schreiben
> 
> ```
> java C:\java\HelloWorld
> ...



HelloWorld.class liegt im Verzeichnis C:\Java

Dort wurde sie nach dem Kompilieren automatisch abgelegt


;-)


----------



## parabool (11. Aug 2011)

schau mal ob deine Klasse in einem Package liegt.
Dann müsstest Du es so starten: java deinpackage.HelloWorld
(vom Verzeichnis über den Package aus)


----------



## Wuestenfuchs31 (11. Aug 2011)

parabool hat gesagt.:


> schau mal ob deine Klasse in einem Package liegt.
> Dann müsstest Du es so starten: java deinpackage.HelloWorld
> (vom Verzeichnis über den Package aus)



Sie liegt in keinem Package und mit dem Befehl gehts leider auch nicht.


----------



## jgh (11. Aug 2011)

zeigt er dir mit [c]dir[/c] eigentlich die HelloWorld.class an?

oder kann sonst evtl. irgendeines von den Security-Programmen evtl. die Ausführung von .class Dateien verhindern?


----------



## Gast2 (11. Aug 2011)

Wuestenfuchs31 hat gesagt.:


> HelloWorld.class liegt im Verzeichnis C:\Java
> 
> Dort wurde sie nach dem Kompilieren automatisch abgelegt
> 
> ...



Hast du irgendwie an deinem classpath rumgespielt oder ähnliches?
Versuch mal

```
java -cp . HelloWorld
```


----------



## bone2 (11. Aug 2011)

so sollte es sein







edit: im zweiten screenshot hast du es ja jetzt so... hm

installier java nochmal neu


----------



## Wuestenfuchs31 (11. Aug 2011)

EikeB hat gesagt.:


> Hast du irgendwie an deinem classpath rumgespielt oder ähnliches?
> Versuch mal
> 
> ```
> ...



DAS FUNKTIONIERT!!!

Super danke:toll:

Ich hab eigentlich nicht an meinem Classpath rumgespielt aber was müsste ich denn ändern, damit ich java-Programme ganz normal ausführen kann?
Momentan verweist mein Classpath noch auf C:\Program Files (x86)\Java\jdk1.7.0\lib


----------



## Gast2 (11. Aug 2011)

Der Classpath sollte immer das aktuelle Verzeichnis mit einschließen, also so:

```
.;C:\Program Files (x86)\Java\jdk1.7.0\lib
```
Standardmäßig sollte der aber auch so angelegt sein


----------



## SamHotte (11. Aug 2011)

SamHotte hat gesagt.:


> Wie sieht denn Dein CLASSPATH aus? Die Java-Laufzeit sucht nicht von sich aus im aktuellen Verzeichnis (liegt an der Unix-Herkunft).
> 
> Dort muss entweder das Verzeichnis, in dem die HelloWorld.java liegt, drin stehen oder der "." für das jeweils aktuelle Verzeichnis.



Wer lesen kann, ist klar im Vorteil ...

/Edit: wieso geht das Quoten eigentlich nicht?
/Edit2: etzert!


----------



## fireymango (19. Okt 2011)

EikeB hat gesagt.:


> Hast du irgendwie an deinem classpath rumgespielt oder ähnliches?
> Versuch mal
> 
> ```
> ...


Bin neu hier und genau dieses Problem hatte ich nun auch. Danke für den Tipp hatt mir sehr weitergeholfen. Es lief aber auch wobei ich einfach java dateiname ohne .class


----------



## Meyar (23. Mai 2012)

Ich habe gerade das Gleiche Problem gehabt...
Bei mir lag es daran, dass ich anstatt:

java HalloWelt

nach dem Kompilieren folgendes in das CMD Fenster eingegeben habe:

java HalloWelt.class

Dann erscheint nämlich die selbe Fehlermeldung von wegen Hauptklasse konnte nicht gefunden werden.
Vielleicht liegts ja daran...


----------



## prinz_ileus (1. Jun 2012)

Die Diskussion ist zwar nicht mehr aktuell, aber ich habe das gleiche Problem gehabt, und heute erfolgreich lösen können.

Statt bei den Umgebungsvariablen / Variablen "Classpath" habe ich die Variable "JAVA_HOME" erstellt. einfach den Pfad C:\Program Files\java\jdk1.7.0_04 eingeben (dieser Pfad muss nicht stimmen schaut in eurem WindowsExplorer nach, wichtig ist, dass nach der aktuellen Version (bei mir eben jdk1.7.0_04) kein \bin mehr eingegeben wird) ok klicken (mehrmals), dann Neustart, und java Hallo sollte laufen.


----------



## Kim.123 (12. Nov 2012)

probier mal
starte cmd also MS-DOS
C:> echo %CLASSPATH%


----------



## vkay90 (1. Jul 2014)

Wenn eine Hauptklasse nicht geladen werden kann, dann kann das Problem nur darin bestehen, dass sich das .class File nicht im richtigen Verzeichnis befindet. 

Das Class File muss sich im Verzeichnis befinden, welches im Classpath gewählt wurde. 

Wenn für den Classpath in den Umgebungsvariablen beispielsweise  C:\Java_Class_Files vermerkt wurde, könnte das .java File in diesem Verzeichnis kompiliert werden, aber müsste in jedem Fall dort abgelegt sein, wenn man mit java das Programm starten will.


Checkliste:

1. Path/Classpath einrichten.
   Benutzervariable mit dem Namen "Path" anlegen und das Verzeichnis des Ordners "bin" des jdk angeben.

2. Weiere Benutzervariable mit dem Namen "Classpath" anlegen und das Verzeichnis angeben, in dem die Class Files abgelegt werden, die man dann per CMD.exe ausführen möchte.

Wichtig: Beim Kompilieren mit dem Kommandozeilen Interpreter muss man sich im jeweiligen Verzeichnis des zu kompilierenden java Files befinden. (Gilt nicht für das Ausführen von Class Files).

LG Vadim


----------

