# Exportiertes Jar-File geht nicht



## shevazri (31. Mrz 2012)

Hallo

Programmiere gerade ein Spiel und wollte daher auch es mal in ein Jar-Exportieren, habe das ganze Projekt ausgewählt und auch ein Manifest-File mit der main-Class erstellen lassen, doch leider funktioniert es nicht immer wenn ich es starten will kommt die Fehlermeldung "could not find the main class..."

Hoffe ihr könnt mir helfen im Anhang ist das Jar-File


----------



## L-ectron-X (31. Mrz 2012)

Bei mir funktioniert dein Programm, zwar mit Fehlern (Darstellung und Beenden) aber es geht.
Wahrscheinlich hast du dein Programm mit Java 1.7 kompiliert und führst es mit Java 1.6 aus.
Mehr Aufschluss über die Art des Fehlers bekommst du, wenn du dein Programm mal in der Befehlszeile ausführst:

```
java -jar run_for_270.jar
```


----------



## shevazri (1. Apr 2012)

Okey danke, hab es mal mit der cmd geöffnet und du hast recht, es funktioniert zwar aber meine Bilder und meine Grafik funktioniert nicht, weiss jemand an was das liegen könnte???

Und wie finde ich heraus mit welchem JAVA ich es kompiliert habe??


----------



## L-ectron-X (1. Apr 2012)

shevazri hat gesagt.:


> aber meine Bilder und meine Grafik funktioniert nicht...


Hier findest du alles, was du zu Bildern in Jar-Dateien wissen solltest:
Grafikdateien laden und anzeigen ? Byte-Welt Wiki



shevazri hat gesagt.:


> Und wie finde ich heraus mit welchem JAVA ich es kompiliert habe??


Mit dem Disassembler-Tool aus dem JDK *javap*.
Du kannst dir dazu eine Batchdatei schreiben, die dir etwas Arbeit abnimmt.

```
@echo off
set path=.;C:\Program Files (x86)\Java\jdk1.7.0_03\bin
javap -v MeineKlasse.class
pause
```

Wie im Bild zu sehen ist, gibt die _major version_ Auskunft über die benutzte Kompiler-Version, mit der die Klasse kompiliert wurde.

Welche major version sich hinter welchem JDK verbirgt, findest du hier:
http://www.java-forum.org/allgemeines/132564-class-datei-versionen.html


----------



## shevazri (3. Apr 2012)

Hey also die Grafiken werden komischerweise wenn ich das Programm mit Eclipse starte angezeigt. Nur eben nicht wenn ich das Jar über die cmd starte.

Also ich führe das Programm mit der gleichen Version aus wie mit der ich es kompiliert habe, daran sollte das Problem also nicht liegen.


----------



## L-ectron-X (4. Apr 2012)

Zeig bitte mal den Code, den du geschrieben hast, um deine Grafiken einzubinden.


----------



## shevazri (4. Apr 2012)

Also ich mach einfach ein Label und nehme dann ein Icon dazu hier mal ein Beispiel:


```
JLabel icon_obama = new JLabel(new ImageIcon("img/candidates/obama.jpg"));
	JLabel icon_romney = new JLabel(new ImageIcon("img/candidates/romney.jpg"));
	JLabel icon_santorum = new JLabel(new ImageIcon("img/candidates/santorum.jpg"));
	JLabel icon_gingrich = new JLabel(new ImageIcon("img/candidates/gingrich.jpg"));
	JLabel icon_paul = new JLabel(new ImageIcon("img/candidates/paul.jpg"));
```

und ausserdem habe ich noch eine Grafik die aus Polygonen besteht.


----------



## L-ectron-X (4. Apr 2012)

Lies bitte den Link oben durch, den ich bereits gepostet habe. Dort findest du des Rätsels Lösung.


----------



## shevazri (4. Apr 2012)

Ich habe den Link durchgeschaut und so habe ich es auch gemacht und wenn man das Programm in Eclipse ausführt zeigt es mir auch alle Bilder und die Grafik an, aber eben nicht wenn man es im Jar ausführt.


----------



## L-ectron-X (4. Apr 2012)

Starte das Programm mal auf der Konsole mit 
	
	
	
	





```
java -jar MeineJar.jar
```
 und poste dann hier mal die Fehlermeldungen.
Normalerweise wird das Programm in so einem Fall nicht ohne Fehlermeldungen ausgeführt.


----------



## shevazri (5. Apr 2012)

So danke, es sagt mir die Pfade sind nicht korrekt, wie muss ich es machen, dass die Pfade von Eclipse dann auch im Jar gehen oder was muss ich da umstellen.

[EDIT]So habe es endlich zum Laufen gebracht:

Dein Link hat dabei geholfen.
Hier die Lösung, man muss das Zeug mit getClass.getResource() einbinden.

Ich habe aber noch das Problem, dass nun Eclipse mir eine NullPointerException an den Kopf wirft, aber wie gesagt im Jar-File geht alles[/EDIT]


----------



## L-ectron-X (5. Apr 2012)

Brauchst du noch Hilfe? Dann brauchen wir die Fehlermeldung. ???:L


----------



## shevazri (5. Apr 2012)

Nein danke, es funktioniert jetzt alles war aufwendig aber hat Zeit gekostet. 

Aber noch etwas es wäre doch noch schön wenn man das Jar-File ganz einfach über einen Doppelklick ausführen könnte, muss man da noch etwas spezielles machen? Das Manifest-File wird richtig erstellt trotzdem sagt er immer, das er die Main-Klasse nicht finden kann.

EDIT: Danke noch für die Hilfe bis hierhin.


----------



## L-ectron-X (5. Apr 2012)

shevazri hat gesagt.:


> Das Manifest-File wird richtig erstellt...


Keineswegs. In der Manifestdatei gibt es keinen 
	
	
	
	





```
Main-Class
```
 Eintrag.


----------



## shevazri (5. Apr 2012)

in meiner neusten Version schon. Im anhang die manifest-datei


----------



## L-ectron-X (5. Apr 2012)

Tja, dein letzter Beitrag führt zu keiner Lösung...
Nichts passt zusammen. Es gibt keinen Zusammenhang mit deiner Manifestdatei und dem Problem.


----------



## shevazri (5. Apr 2012)

Das Problem ist, dass ich wenn ich die Jar-Datei über den Doppelclick ausführen möchte, das kommt er könnte die main-Klasse nicht finden, obwohl meiner Meinung nach am Manifest-File nichts falsch ist, das möchte ich halt noch beheben.


----------



## L-ectron-X (6. Apr 2012)

Ja, dein Manifest ist formell in Ordnung, passt aber nicht zu der oben geposteten Jar-Datei...


----------



## shevazri (7. Apr 2012)

[EDIT]Frage im Parallelthema: http://www.java-forum.org/allgemeine-java-themen/134457-jar-file-startet-ueber-doppelklick.html geschlossen.[/EDIT]

Aber wieso startet es bei dir und bei mir nicht. Das mit dem "Beenden" versuche ich noch zu beheben, aber ich suche noch die Gründe wieso ich es nicht mit einem Doppelklick starten kann.


----------



## L-ectron-X (7. Apr 2012)

Entweder erfahre ich gerade ein Déjà-vu? :reflect: ...
...oder du bist einfach nur lernresistent.
Das habe ich dir bereits im 2. Beitrag (oben) versucht zu erklären.

Wahrscheinlich hast du eine inkompatible VM. Es kann sein, dass du mit Java 1.7 kompiliert hast, dann aber mit einer 1.6er JRE dein Programm startest.

Wenn du in die Befehlszeile 
	
	
	
	





```
java -jar runfor270.jar
```
 eingibst, sollten Fehlermeldungen ausgegeben werden, die Hinweise über das Problem geben können.


----------



## shevazri (7. Apr 2012)

JA ich bin lernresistent, sagen meine Lehrer auch immer.

Aber wenn ich es über cmd-starte gibt es keine Fehler sondern es funktioniert, beim Doppelklick passiert einfach nichts.

Ausserdem funktioniert es bei all meinen Kollegen und die Haben Java 6 ich habe aber eine Java 7 JVM also kann es daran nicht liegen.


----------



## L-ectron-X (7. Apr 2012)

Dann könnte es auch sein, dass die javaw-Zuordnung fehlerhaft ist.
Öffne mal deinen Registry-Editor durch Eingabe von 
	
	
	
	





```
regedit
```
 auf der Kommandozeile.
Navigiere dann innerhalb des Verzeichnisbaumes nach 


```
HKEY_CLASSES_ROOT\jarfile\shell\open\command
```

Auf der rechten Seite müsste nun folgender Schlüsselwert zu sehen sein (Das Verzeichnis zur JRE kann bei dir auch anders lauten).

```
"C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %*
```

Wenn dieser Schlüssel nicht existiert, kannst du ihn manuell anlegen, oder einfach die alte JRE deinstallieren und eine aktuelle installieren.
Der Schlüssel sollte dann angelegt werden.


----------



## shevazri (11. Apr 2012)

Also der Schlüssel ist angelegt und der Pfad zeigt auch auf das richtige Verzeichnis. Ich werd es morgen mal auf meinem Laptop versuchen.

Ich habe es auch mal versucht mit der 64-bit Version von Java, es startet aber immer noch nicht.

Also bei mir auf dem Laptop funktioniert es nicht, bei meinem Kollegen aber schon. Auch auf meinem Pfad stimmt der Schlüssel in "jarfile".


----------



## L-ectron-X (12. Apr 2012)

So wie ich das sehe, haben wir alle Stolperstellen abgeklopft. Das Programm läuft auf Rechnern, die mindestens Java 1.6 installiert haben. Bei deinen Kollegen läuft es, nur bei dir nicht.

Das Problem ist also auf deinem Rechner zu suchen.
Dort stimmt der Schlüssel in der Registry, eine JRE 7 ist installiert. Gut!
Es startet dort mit einem Aufruf ohne Fehlermeldung in der Kommandozeile. Gut!

Falls du nur eine 64-Bit Version der JRE installiert hast, solltest du auf jeden Fall auch die 32-Bit Version zusätzlich installieren.

Ansonsten kann es imho keine weiteren Fallstricke geben.


----------



## shevazri (12. Apr 2012)

Hallelujah, hab jetzt die 64-bit Version und die 32-bit Version installiert und nun funktioniert es auch.

Danke für die Hilfe.:toll::toll::toll::toll::toll::toll:


----------

