Compiler-Fehler Java findet main Klasse nicht

javadau2018

Mitglied
Hallo, alle zusammen!

Ich habe momentan einen riesigen Knoten im Gehirn und bekomme ihn nicht gelöst..

Ich habe gestern ein Programm kompiliert, welches aus mehreren .Java Dateien besteht. das ganze habe ich über diesen cmd Befehl gemacht javac Name.java. Danach hatte ich meine Name.class. Diese und auch die anderen .class Dateien habe ich mir geschnappt und in ein anderes Verzeichniss gepackt. Hier greift dann eine .bat Datei auf die Datei NameDesProgramms.jar zu.

Folgender Fehler wird mir dann berim Starten den Dienstes angezeigt:
Code:
java.lang.NoClassDefFoundError: Name
Caused by: java.lang.ClassNotFoundException: Name
 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)
Exception in thread "main"

Ich habe schon herausgefunden, dass ich wohl eine Classpath setzten muss. Aber von wo nach wo? Und wo setze ich diesen? Kann Eclipse das nicht schon von Hause aus?

In dem Manifest steht folgendes:
Manifest-Version: 1.0
Class-Path: .
Main-Class: Name

Es kann doch eigentlich nicht so schwer sein einen "einfachen" Path zu setzen, aber irgendwie habe ich einen Totalausfall der Festplatte🙁.

Ich habe mir auch hier im Forum schon die Anleitungen durch gelesen, aber ich blicke da irgendwie nicht im Ansatz durch....

Vielen Dank für eure Hilfe!
 
Zuletzt bearbeitet von einem Moderator:
Programm von Konsole kompilieren und starten.
1) Kopiere die Dateien .java in ein Verzeichenis.
2) Öffne eine Konsole und wechsle in das Verzeichnis.
3) Kompiliere die Dateien mit:
javac -cp . *.java
4) Starte das Programm mit:
java -cp . start

Wichtig falls in einer Datei package 'name' steht dann geht das so nicht weil Java dann im Unterverzeichnis 'name'
sucht.

Der Klassenpfad wird hier mittels -cp . auf das lokale Verzeichnis gesetzt.

😉
 
Danke ich werde es ausprobieren!

Ich bin jetzt erst einmal, hergegangen und habe alles in einen Ordner gepackt und dann entsprechend die Pfade der arbeitenden Dateien angepasst!

Aber da ich das Projekt nochmal neu aufarbeiten muss, damit es auch für den Kunden hübsch ist😉
 
Auf die ausführbare Datei, in unserem Fall 'start.java', im Package Explorer rechts klicken. Im Menu dann auf Export klicken. Da Runnable JAR file wählen. Die start Konfiguration und den Zielordner entstellen. Dadurch bekommt man eine ausfürbare Jar Datei die alle Klassen des Projekt beinhaltet.
😉
 
Guten Morgen,
ich werde es beim nächsten Projekt mal ausprobieren. Vielen Dank für die Ganzen Tipps!!!!

Ich habe erst vor knapp drei Wochen mir Java angefangen und um ehrlich zu sein hat es mir ein wenig Angst gemacht.... Aber die Community hier ist echt KLASSE!!!! Und sie macht einem das lernen wirklich leichter!!!!! Vielen Dank dafür!!!!!
 
Guten Morgen,
ich habe wie Blender3D geschrieben hat folgendes umgesetzt:
Auf die ausführbare Datei, in unserem Fall 'start.java', im Package Explorer rechts klicken. Im Menu dann auf Export klicken. Da Runnable JAR file wählen. Die start Konfiguration und den Zielordner entstellen. Dadurch bekommt man eine ausfürbare Jar Datei die alle Klassen des Projekt beinhaltet.

Leider wird die das Ganze schon wieder nicht gefunden.....

Das steht im Manifest:
Code:
Manifest-Version: 1.0
Class-Path: .
Main-Class: meinpackete.HelloWorld
Verweise ich jetzt in den \bin Ordner bekomme ich die Fehlermeldung, dass die Main-Class nicht gefunden werden kann.
Auch folgender Verweis hat keinen Zweck \bin\HelloWorld.jar.
Beim kompilieren, habe ich auch ganz bewusst darauf geachtet, dass alles in den selben Ordner gepackt wird, inkl. der .class Dateien.
Und die Mein-Class habe ich sowohl mit . als auch \ angegeben. Wobei ich festgestellt habe, dass das sowieso egal ist, weil . zu \ gemacht wird.
Ich bin sogar hergegangen und habe in die Workbench verwiesen, aber auch das hat logischer Weise nicht geholfen.

Seit 2 Tagen tüftle ich jetzt schon an diesem blöden Fehler. Und wie so häufig, weis ich das der Fehler vorm PC sitzt😉
 
Zuletzt bearbeitet von einem Moderator:
Moin,

sicher, dass es wirklich meinpackete heißt??
Poste doch mal einen ScreenShot, auf dem man die gesamte Filestruktur sieht ... dieses Rumgerate bringt doch nichts!

VG Klaus
 
Code:
C:\Arbeit\Export\bin
- HelloWorld.class
- HelloWorld.jar
   - META-INF
   - MANIFEST.MF
   - meinpackete
      - HelloWorld.class
      - BilderLaden.class
      - ErrorLog.class
- BilderLaden.class
- ErrorLog.class
 
Zuletzt bearbeitet von einem Moderator:
nein... hatte es eigentlich schick gemacht...
Code:
C:\Arbeit\Export\bin
- HelloWorld.class
- BilderLaden.class
 - ErrorLog.class

- HelloWorld.jar
-- meinpackete
--- HelloWorld.class
--- BilderLaden.class
--- ErrorLog.class

-- META-INF
--- MANIFEST.MF
 
Zuletzt bearbeitet von einem Moderator:
Die Frage von @mrBrown war hier wohl eher, ob sie wirklich alle im gleichen Verzeichnis liegen !!

Schick hin, schick her ... was sollen einem jetzt die vielen Dashes sagen ?? 🙄
Und die hat er damit beantwortet 😉

Dashes sind doch eine übliche Darstellung von Verzeichnissen...
nein... hatte es eigentlich schick gemacht...
Dazu solltest du das ganze in Coda-Tags ([code]...[/code]) wrappen.
 
SRY für das rumgehampel.

Ja die Dashes zeigen die Ordnerstruktur.
Hier das Inhalt des Manifest.mf
Manifest-Version: 1.0
Class-Path: .
Main-Class: meinpackete.HelloWorld

Die Fehlermeldung im Errorlog.
java.lang.NoClassDefFoundError: meinpackete\HelloWorld
Caused by: java.lang.ClassNotFoundException: meinpackete.HelloWorld
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)
Exception in thread "main"
 

Zurück
Oben