Problem mit jar "Could not find main class"

Status
Nicht offen für weitere Antworten.

odín

Mitglied
Hallo,

also Fehler bei jar's sind ja scheinbar recht häufig. Allerdings finde ich meinen Fehler doch recht sonderbar, auch wenn er sicherlich mit der mainfest Datei zusammenhängt.

Also folgendes Problem:

wenn ich ein jar archiv mit folgender Manifest erzeuge, kann ich die jar anklicken und es läuft alles perfekt.

CLASS-PATH: .
Main-Class: SchiffeVersenken.StartFrame
/Enter/

erstellt über Konsole mit: jar cvfm SchiffeVersenkenOnline.jar ManifestSchiffe.mf -C SchiffeVersenken/ .

Wenn ich nun allerdings meine jar in ein anderes Verzeichnis verschiebe, läuft sie nicht mehr.
Es kommt der berühmte Fehler "could not find main class. program wil exit".

Des Weiteren hab ich beobachtet, dass wenn ich in den Ordner, der in die jar als Package genommen wurde, umbenenne, geht es auch nicht mehr.

Es scheint, als ob die jar auf den Ordner zugreift und nicht auf sich selbst.
Ich vermute es liegt am class-path den ich oben gesetzt habe. Wenn ich diesen allerdings weglasse geht es auch nicht mehr.

Meine Ordner Struktur:

K:\Projekt\
Hier liegt die Manifest mit der ich das archiv erzeugt habe. Die jar liegt auch hier.

K:\Projekt\SchiffeVersenken\
Hier drin liegt die Start-Klasse StartFrame Diese hat natürlich auch eine main Methode. Wenn ich diesen Ordner umbenenne geht es nicht mehr. Zudem ist dieser Ordner als Package für die einzelnen Klassen angeben, liegt also auch in der jar drin.

Wie schaffe ich es nun eine jar zu erzeugen, die nicht auf ihren "Ursprung" zugreift?
Ich hoffe ich konnte mich halbwegs klar ausdrücken.

Danke schon mal im Voraus.

Sollte diese Frage schon einmal im Forum beantwortet gewesen sein, so bitte ich diesen Post zu entschuldigen. Die Suchfunktion hat mich an dieser Stelle nicht weiter gebracht ^^.

Gruß Odin
 

foobar

Top Contributor
Du fügst den aktuellen Pfad dem Classpath hinzu und in dem Pfad liegen auch noch deine Classfiles. Daher werden bestimmt die Classfiles des Dateisystems verwendet.
Diese Zeile ist überflüssig:
Code:
CLASS-PATH: .
 
M

MiDniGG

Gast
Manifest-Version: 1.1
Main-Class: package.Mainclass
Class-Path: libFolder/lib.jar


Und die leerzeile zum Schluss nicht vergessen :)

Edit: Also falls du irgendwelche LIBS hast solltest du die entweder mitpacken oder eben entsprechend mit verschieben :)
 

odín

Mitglied
Erstmal danke für die Antworten...

aber leider läuft das so auch nicht...

Ich habe die Manifest jetzt so umgeschrieben:

Code:
Main-Class: SchiffeVersenken.StartFrame
[Leerzeile]

und so das Archiv erstellt:

Code:
jar cvfm SchiffeVersenkenOnline.jar ManifestSchiffe.mf -C SchiffeVersenken/
.


wenn ich nun per:

java -jar SchiffeVersenkenOnline.jar

versuche das Programm zu starten, kommt folgende Fehlermeldung:

Code:
K:\projekt>java -jar SchiffeVersenkenOnline.jar
Exception in thread "main" java.lang.NoClassDefFoundError: SchiffeVersenken/StartFrame
Caused by: java.lang.ClassNotFoundException: SchiffeVersenken.StartFrame
        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 java.lang.ClassLoader.loadClassInternal(Unknown Source)


und wenn Ich die Jar anklicke kommt halt nur das Fenster, was sagt:
could not find main class, program will exit

Da ich vermute, dass das dann wohl doch irgendwo an der Klasse selbst liegt, hier mal der Code.
Dieser ist per Netbeans 3.6 erstellt worden.


Java:
package SchiffeVersenken;


/** Diese Klasse ist die Startklasse. Hier kann der User ein neues Spiel starten, oder an einem 
 *  Spiel teilnehmen. Des Weiteren besteht die Möglichkeit die Highscore einzusehen, sowie die 
 *  Hilfe und die Credits. Dies ist die Main-Klasse, die auch aus dem Package heraus gestartet wird.  
 */
public class StartFrame extends javax.swing.JFrame {
    
    /** Konstruktor erzeugt den neuen Frame. */
    public StartFrame() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {  // Ich habe mal den Code der GUI nicht gepostet, da ich eh nix ändern könnte.
    }

    /** Diese Methode erzeugt einen neunen StatistikFrame. In diesem werden dann Daten über die 
     * gespielten Spiele angezeigt
     */
    private void highscoreActionPerformed(java.awt.event.ActionEvent evt) {
        StatistikFrame sFrame = new StatistikFrame();
        sFrame.show();
    }

    /** Diese Methode erzeugt einen neunen CreditsFrame. In diesem werden Infos zum Hersteller 
     *  geliefert.
     */
    private void creditsActionPerformed(java.awt.event.ActionEvent evt) {
        Credits cred = new Credits();
        cred.show();
    }

    /** Wenn der Beenden Button gedrückt wird, wird das Programm beendet. */
    private void beendenActionPerformed(java.awt.event.ActionEvent evt) {
        setVisible(false);
        System.exit(0);
    }

    /** Wenn der Hilfe Button gedrückt wird, wird ein neues HilfeFrame-Objekt erzeugt und angezeigt. */
    private void hilfeActionPerformed(java.awt.event.ActionEvent evt) {
        HilfeFrame hilfe = new HilfeFrame();
        hilfe.show();
    }

    /** Wenn der Spieler an einem Spiel teilnehmen möchte, wird ein neues Objekt vom Typ TeilnehmerFrame
     *  erzeugt. Dort muss er dann Agaben zur Verbindung einfügen.
     */
    private void teilnehmenActionPerformed(java.awt.event.ActionEvent evt) {
        new TeilnehmenFrame().show();
    }

    /** Wenn der Spieler ein neues Spiel erstellen will, wird ein neues Objekt vom Typ ErstellenFrame 
     * erzeugt. Dort muss er dann Eingaben zur Art des Spieles machen.
     */
    private void neuActionPerformed(java.awt.event.ActionEvent evt) {
        new ErstellenFrame().show();
    }
    
    /** Beendet die Aplikation */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * Dies ist die Main Methode der Klasse StartFrame.
     * @param args Die Kommandozeilen-Parameter.
     */
    public static void main(String args[]) {
        new StartFrame().show();
    }


Vielleicht hat ja einer eine Idee.


Gruß Odin
 

odín

Mitglied
foobar hat gesagt.:
Überprüf mal mit jar tf SchiffeVersenkenOnline.jar die Packages

Ich weiß jetzt zwar nicht was das bringt, aber hier mal was er ausgibt: ???:L :)

K:\projekt>jar tf SchiffeVersenkenOnline.jar
META-INF/
META-INF/MANIFEST.MF
SchiffeVersenken/./
SchiffeVersenken/./.nbattrs
SchiffeVersenken/./bilder/
SchiffeVersenken/./bilder/kreuzer_h.gif
SchiffeVersenken/./bilder/kreuzer_v.gif
SchiffeVersenken/./bilder/ocean.jpg
SchiffeVersenken/./bilder/patrol_h.gif
SchiffeVersenken/./bilder/patrol_v.gif
SchiffeVersenken/./bilder/Thumbs.db
SchiffeVersenken/./bilder/traeger_h.gif
SchiffeVersenken/./bilder/traeger_v.gif
SchiffeVersenken/./bilder/uboot_h.gif
SchiffeVersenken/./bilder/uboot_v.gif
SchiffeVersenken/./bilder/zerstoerer_h.gif
SchiffeVersenken/./bilder/zerstoerer_v.gif
SchiffeVersenken/./Client.class
SchiffeVersenken/./Client.java
SchiffeVersenken/./Connection.class
SchiffeVersenken/./Connection.java
SchiffeVersenken/./Credits$1.class
SchiffeVersenken/./Credits$2.class
SchiffeVersenken/./Credits.class
SchiffeVersenken/./Credits.form
SchiffeVersenken/./Credits.java
SchiffeVersenken/./ErstellenFrame$1.class
SchiffeVersenken/./ErstellenFrame$2.class
SchiffeVersenken/./ErstellenFrame.class
SchiffeVersenken/./ErstellenFrame.form
SchiffeVersenken/./ErstellenFrame.java
SchiffeVersenken/./HilfeFrame$1.class
SchiffeVersenken/./HilfeFrame$2.class
SchiffeVersenken/./HilfeFrame.class
SchiffeVersenken/./HilfeFrame.form
SchiffeVersenken/./HilfeFrame.java
SchiffeVersenken/./Schiffe.class
SchiffeVersenken/./Schiffe.java
SchiffeVersenken/./Server.class
SchiffeVersenken/./Server.java
SchiffeVersenken/./Spielfeld.class
SchiffeVersenken/./Spielfeld.java
SchiffeVersenken/./SpielFrame.form
SchiffeVersenken/./SpielFrame.java
SchiffeVersenken/./Spielverwaltung.class
SchiffeVersenken/./Spielverwaltung.java
SchiffeVersenken/./StartFrame$1.class
SchiffeVersenken/./StartFrame$2.class
SchiffeVersenken/./StartFrame$3.class
SchiffeVersenken/./StartFrame$4.class
SchiffeVersenken/./StartFrame$5.class
SchiffeVersenken/./StartFrame$6.class
SchiffeVersenken/./StartFrame$7.class
SchiffeVersenken/./StartFrame.class
SchiffeVersenken/./StartFrame.form
SchiffeVersenken/./StartFrame.java
SchiffeVersenken/./Statistik.class
SchiffeVersenken/./Statistik.java
SchiffeVersenken/./StatistikFrame$1.class
SchiffeVersenken/./StatistikFrame$2.class
SchiffeVersenken/./StatistikFrame$3.class
SchiffeVersenken/./StatistikFrame.class
SchiffeVersenken/./StatistikFrame.form
SchiffeVersenken/./StatistikFrame.java
SchiffeVersenken/./TeilnehmenFrame$1.class
SchiffeVersenken/./TeilnehmenFrame$2.class
SchiffeVersenken/./TeilnehmenFrame.class
SchiffeVersenken/./TeilnehmenFrame.form
SchiffeVersenken/./TeilnehmenFrame.java
SchiffeVersenken/./SpielFrame$1.class
SchiffeVersenken/./SpielFrame$2.class
SchiffeVersenken/./SpielFrame$3.class
SchiffeVersenken/./SpielFrame$4.class
SchiffeVersenken/./SpielFrame$5.class
SchiffeVersenken/./SpielFrame$6.class
SchiffeVersenken/./SpielFrame$7.class
SchiffeVersenken/./SpielFrame.class

Gruß Odin
 

odín

Mitglied
Beim wiederholten lesen, ist mir dann der Fehler aufgefallen!

Der Archive-Macher erstellt quasi noch einen Ordner dazwischen! Der heißt einfach nur "."
Darum ist er mir auch nicht im Archiv aufgefallen.

Ich habe ihn jetzt gelöscht, und die Inhalte einen Ordner höher abgelegt. Jetzt läuft alles perfekt!

Allerdings weiß ich immer noch nicht, wie der richtige Konsolenaufruf gewesen wäre, mit dem man das jar-archiv erstellen müsste. Der oben genannte kann es ja nicht sein :shock:

folgende gehen nicht:

jar cvfm Schiffe.jar ManifestSchiffe.mf -C SchiffeVersenken/ *
jar cvfm Schiffe.jar ManifestSchiffe.mf -C SchiffeVersenken
jar cvfm Schiffe.jar ManifestSchiffe.mf -C SchiffeVersenken/.
jar cvfm Schiffe.jar ManifestSchiffe.mf -C SchiffeVersenken/


Gruß Odin
 

L-ectron-X

Gesperrter Benutzer
Die show()-Methode ist deprecated und sollte nicht mehr verwendet werden.
In der FAQ liegt eine Batchdatei, vielleicht kann sie dir beim Jar-Erzeugen helfen.
 

foobar

Top Contributor
Ich mache immer ein
Code:
jar cf myJar.jar *

im bin-Ordner
 
J

johnny123

Gast
verstehe ich nicht ganz wie du das mit dem . ordner meinst!?
ich habe genau das selbe problem, beim verschieben des .jar file oder beim entfernen der quelldateien kommt die fehlermeldung dass main nicht gefunden wurde.

wenn ich mit jar tf test.jar den inhalt anzeige stehen bei mir die . ordner nicht, also sieht alles ganz normal aus .. ordner/file.class, lib/ext.jar ...

ich benutze windows 7

hat noch jemand eine idee?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Prodriver22 Erste Schritte "Could not find Main Class" Problem Java Basics - Anfänger-Themen 17
B Erste Schritte cannot find symbol - problem Java Basics - Anfänger-Themen 9
L Problem mit Vererbung (extends) cannot find symbol Java Basics - Anfänger-Themen 3
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
S Problem mit Javaeditor: Cannot find Symbol Java Basics - Anfänger-Themen 13
A Ant Problem: Unable to find a javac compiler; Java Basics - Anfänger-Themen 4
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben