jar-Datei öffnen

Status
Nicht offen für weitere Antworten.

Nathy

Aktives Mitglied
Hallo

Ich habe eine Jar-Datei erstellt.
Wenn ich ein Doppelklick mache kommt die Meldung:
Code:
Could not find the main class. prgramm will exit.
Wenn ich es im DOS mit "java -jar Datei.jar", kommt die Meldung:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: projekt/Main
Ich besitze aber eine Main Methode und wenn ich dort im NetBeans auf run klicke funktioniert es auch. Wo liegt das Problem?

Gruss und danke[/code]
 
Du hast wohl kein Manifest in der Jar-Datei.
Guck mal hier.

Leider kenn ich NetBeans nicht gut, aber irgendwo beim Jar-erstellen wird es da sicherlich ein Feld "Main-Class" (oder ähnliches...) haben.
 
Ja, die Klasse, die als Main-Class für das Projekt deklariert wurde, wird zum Erzeugen des Manifests hinzugezogen.
Wenn man den Haken bei Projekterzeugung weglässt/entfernt, wird es nie eine korrekte Jar-Datei geben.
Du kannst aber die Klasse, die Main-Class sein soll nachträglich nochmal festlegen.
Dazu klickst du einmal mit der rechten Maustaste auf dein Projekt im Projektbaum (Projects), danach wählst du im sich öffnenden Kontextmenü ganz unten Properties. Das sich daraufhin öffnende Fenster zeigt auf der linken Seite einen Baum mit verschiedenen Einstellmöglichkeiten zum Projekt. Unter Packing kannst du den Namen und Speicherort der Jar-Datei festlegen. Unter Run legst du den Namen der Main-Class fest. Mit Klick auf OK in diesem Fenster, ist die Operation abgeschlossen und es steht der Erzeugung eines ausführbaren Jar-Files (mit Shift+F11 oder dem "braunen Icon mit dem Besen"), nichts mehr im Wege.
 
Danke für die Hilfe.
Jetzt kommt eine andere Meldung:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group
        at Robotersteuerung.Main$1.run(Main.java:27)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Was bedeutet das?

Gruss und danke[/code]
 
a) Dass du vergessen hast das GroupLayout in den Classpath aufzunehmen
b) Dass du das GroupLayout nicht dazu kopiert hast
 
a) GroupLayout einfach in dein jar mitverpacken
b) im Manifest den Classpath setzen und die Jar-Datei, in der sich dein GroupLayout befindet in den selben Ordner wie dein "Haupt-Jar" legen.
 
Sorry ich verstehe das nicht. Habe das noch nie gemacht.
Ich habe jetzt die swing-layout-1.0.jar ins gleiche Verzeichnis wie meine jar-Datei, welche ich erstellt habe, gespeichert.
Was ist das Manifest genau?
Ich arbeite mit Netbeans.
 
@hobbit: Sie arbeitet mit NetBeans, da ist das GroupLayout (Freedesign) StandardLayout für alle Container.

Normalerweise sollte es automatisch eingebunden werden. Warum das bei dir nicht so ist, lässt sich von hier aus schlecht sagen. Vermutlich vergisst du einfach nur das libs-Verzeichnis, welches sich unterhalb des dist-Verzeichnisses befindet, in welchem ja auch deine jar-Datei abgelegt wird mit zu kopieren. Die Dateistruktur wurde dabei bereits von NetBeans passend angelegt und darf nicht verändert werden.
Du musst also den gesamten Inhalt des dist-Verzeichnisses kopieren, wenn du dein Programm veröffentlichen willst.
Wenn du das Programm mit Doppelklick in diesem Verzeichnis startest, sollte es schon funktionieren.
 
L-ectron-X hat gesagt.:
@hobbit: Sie arbeitet mit NetBeans, da ist das GroupLayout (Freedesign) StandardLayout für alle Container.

Ah ok, das wusste ich nicht. Hab noch nie mit Netbeans gearbeitet, zwar mal drübergeschaut aber das wars auch schon. Danke, wieder was gelernt 🙂 .
 
Ich habe im Ordner dist keine Unterverzeichnise mehr.
Und beim GUI Builder kann man wählen zwischen:
Layout Generation Style: Swing Layout Extension Library oder
Layout Generation Style: Standard Java 6 Code.
Bei mir ist dort Swing Layout Extension Library angegeben.
 
Dann öffne mal deine Jar-Datei mit einem Packprogramm, z.B. mit WinZip, 7Zip, oder WinRar.
Navigiere innerhalb des Archivs in das Verzeichnis META-INF und Lass dir mal den Inhalt der Manifest-Datei anzeigen.
Am besten du postest den Inhalt mal hier.

Er sollte bei dir in etwa so aussehen:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_09-b05 (Sun Microsystems Inc.)
Main-Class: einPaket.EineMainKlasse
Class-Path: lib/swing-layout-1.0.jar
X-COMMENT: Main-Class will be added automatically by build
 
ich hatte das gleiche problem vor einiger zeit, aber das manual hat geholfen.

aber eine andere frage, kann man die swing-layout-1.0.jar vielleicht irgendwie in die normale jar einbinden, damit man am ende nur ein jar hat?
 
Eine Jar-Datei in ein anderes Jar-Archiv zu packen funktioniert nicht. Dazu muss es vorher entpackt werden. Die Verzeichnisstruktur wird dann in dein eigenes Archiv gepackt. Anleitung für die Erstellung eines solchen Jar-Archivs gibts in den FAQs.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben