ecliptiker: jar-archive ausführen/manifest.mf

hallo,

ich bin gerade dabei, java zu lernen. ich habe das jdk (unter windows xp) erfolgreich installiert und auch schon erfolgreich programme mit javac kompiliert und mit java ausgeführt. nun wollte ich ein archiv erstellen, was soweit auch funktioniert hat. um dieses mit doppelklick ausführbar zu machen, muss man ja nun der manifest-datei den eintrag mit der vollständig qualifizierten hauptklasse hinzufügen.

dazu habe ich eine textdatei 'MFmain.txt' mit dem inhalt 'Main-Class: program.app.Main' erstellt und wollte diese mit der manifest-datei verschmelzen. der befehl sah wie folgt aus:

jar cmf program/app/MFmain.txt program/app/main.jar program/appMain.class

danach habe ich das jar-archiv entpackt (mit winrar) und mir die manifest-datei angesehen, in der der eintrag jedoch nicht vorhanden war. beim doppelklick auf die jar-datei kam nach wie vor die fehlermeldung der jvm.

dann las ich, dass es seit java 6 die möglichkeit gibt, mit dem schalter e direkt die hauptklasse beim erstellen des archivs anzugeben. ich probierte also folgendes:

jar cfe program/app/main.jar program.app.Main program/app/Main.class

danach wieder das archiv entpackt, manifest-datei angesehen, und siehe da, der eintrag 'Main-Class: program.app.Main' war vorhanden. jedoch leiß sich das archiv per doppelklick immernoch nicht starten, stattdessen passierte einfach gar nichts (eigentlich hätte sich ein swing-fenster öffnen sollen). beim versuch, die jar-datei über die konsole auszuführen

java -jar program/app/main.jar

bekam ich die meldung

Exception in thread "main" java.lang.NoClassDefFoundError: program/app/Main$1 at program.app.Main.main(Main.java:18)

was kann ich tun, um jar-dateien ausführbar zu machen?

danke und gruß
stefan

  1. Hallo ecliptiker,

    Exception in thread "main" java.lang.NoClassDefFoundError: program/app/Main$1 at program.app.Main.main(Main.java:18)

    Das $1 deutet darauf hin, dass er nicht die Main-Klasse sondern eine Anonyme Klasse in Main sucht.
    Hast Du wirklich alle class-Dateien in Deinem Jar?

    Grüße

    Daniel

    1. hallo Daniel,

      Hallo ecliptiker,

      Exception in thread "main" java.lang.NoClassDefFoundError: program/app/Main$1 at program.app.Main.main(Main.java:18)
      Das $1 deutet darauf hin, dass er nicht die Main-Klasse sondern eine Anonyme Klasse in Main sucht.
      Hast Du wirklich alle class-Dateien in Deinem Jar?

      sorry, dass ich jetzt erst antworte. ja, es lag daran, dass der compiler wohl für alle inneren klassen extra-dateien erstellt. das wusste ich noch nicht.

      ich habe es jetzt jedenfalls hinbekommen.

      vielen dank für deine antwort :)

      viele grüße