# jar-Datei öffnen



## Nathy (20. Jan 2007)

Hallo

Ich habe eine Jar-Datei erstellt.
Wenn ich ein Doppelklick mache kommt die Meldung: 

```
Could not find the main class. prgramm will exit.
```
Wenn ich es im DOS mit "java -jar Datei.jar", kommt die Meldung:

```
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]


----------



## Beni (20. Jan 2007)

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.


----------



## L-ectron-X (20. Jan 2007)

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.


----------



## Nathy (22. Jan 2007)

Danke für die Hilfe.
Jetzt kommt eine andere Meldung:

```
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]


----------



## The_S (22. Jan 2007)

a) Dass du vergessen hast das GroupLayout in den Classpath aufzunehmen
b) Dass du das GroupLayout nicht dazu kopiert hast


----------



## Nathy (22. Jan 2007)

Und wie muss ich das machen?


----------



## The_S (22. Jan 2007)

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.


----------



## Nathy (22. Jan 2007)

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.


----------



## The_S (22. Jan 2007)

Schau mal in die FAQ, dieser Beitrag sollte dir weiterhelfen

http://www.java-forum.org/de/viewtopic.php?t=14970


----------



## L-ectron-X (22. Jan 2007)

@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.


----------



## The_S (22. Jan 2007)

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  .


----------



## Nathy (22. Jan 2007)

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.


----------



## L-ectron-X (22. Jan 2007)

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
> ...


----------



## Gast (3. Feb 2007)

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?


----------



## L-ectron-X (4. Feb 2007)

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.


----------



## Gast (4. Feb 2007)

Danke. Wirklich gutes tutorial dazu, hat auf anhieb geklappt. THX


----------

