# JAR-Datei ausführen



## AlphaVoice (28. Dez 2011)

Hallo,

ich habe zu Weihnachten ein Buch zur Programmierung in Java bekommen und habe vorgestern mit dem Programmieren losgelegt. Mein derzeitiges Problem liegt nicht am Verständnis, sondern daran, dass ich keine JAR-Dateien öffnen kann.
Ich beschreibe mein Problem mal etwas genauer:

- ich kann Java-Programme, wie NetBeans oder Minecraft problemlos ausführen
- ich kann JAVA-Dateien problemlos mithilfe von "javac" über das CMD kompilieren
- ich kann die erzeugte CLASS-Datei problemlos mithilfe von "java" über das CMD ausführen
- ich kann diese CLASS-Datei ohne Probleme auch mit "jar cfe [FILENAME].jar [FILENAME] *.*" (war doch so, oder?) in ein JAR-Archiv packen
...

doch die erzeugte JAR-Datei kann per Doppelklick nicht geöffnet werden! 
In der Konsole steht dann immer Fehler: 





> Hauptklasse [PFAD_ZUR_JAR] konnte nicht gefunden oder geladen werden.



An den Umgebungsvariablen scheint's denke ich auch nicht zu liegen, da habe ich den Pfad zu den Binarys von der JRE und JDK in der PATH-Variable angegeben.
Und eine CLASSPATH habe ich auch schon angelegt (mit dem Inhalt ".").

Ich bin mit meinem Latein mittlerweile echt am Ende und das obwohl ich mit solchen Sachen normalerweise keine großen Probleme habe.
Ich würde mich über eure Hilfe freuen. 


Gruß,
AlphaVoice


----------



## Camill (28. Dez 2011)

Schon mal 
	
	
	
	





```
javaw -jar File.jar
```
 ausprobiert?


----------



## AlphaVoice (28. Dez 2011)

Camill hat gesagt.:


> Schon mal
> 
> 
> 
> ...


Funktioniert leider nicht, sobald ich die Datei öffnen will, spuckt die Konsole den oben genannten Fehler wieder aus.


----------



## TheDarkRose (28. Dez 2011)

Dann steht deine Main-Class nicht in der MANIFEST.MF


----------



## AlphaVoice (28. Dez 2011)

TheDarkRose hat gesagt.:


> Dann steht deine Main-Class nicht in der MANIFEST.MF


Hm, ist die MANIFEST schon in der JAR enthalten oder muss ich die mit der Konsole zusätzlich erzeugen?
Und was muss in der Datei alles drinstehen?

*// Edit:* Ich glaube irgendwie nicht, dass es daran liegt. Ich hab nämlich auch schon versucht, einzelne JAR's aus dem Forum hier zu laden und auszuführen. Ebenfalls ohne Erfolg...
Von daher schätze ich, dass es an den Umgebungsvariablen oder so liegt.


----------



## Camill (28. Dez 2011)

Dann leg mal eine 
	
	
	
	





```
MANIFEST.MF
```
 Datei mit folgendem Inhalt an(Leerzeile am Ende nicht vergessen!):

```
Main-Class: "ClassName"
```
Und erstelle die Jar-Datei mit 
	
	
	
	





```
jar cvfm "FileName".jar MANIFEST.MF "ClassName".class
```

Denke das es so klappen dürfte.

EDIT: 
Zum starten könnte man testweise den ganzen Pfad zur "jar.exe" angeben, dürfte unter Windows 7 standardmäßig 
	
	
	
	





```
C:\Program Files\Java\jdk1.*.*_**\bin\jar
```
 sein (deiner Version entsprechend anpassen).


----------



## AlphaVoice (28. Dez 2011)

Camill hat gesagt.:


> Dann leg mal eine
> 
> 
> 
> ...


Also, das CMD hat mit dem Erzeugen der Manifest und dem Hinzufügen der Klasse anscheinend kein Problem, aber beheben tut es das Problem nicht.



Camill hat gesagt.:


> EDIT:
> Zum starten könnte man testweise den ganzen Pfad zur "jar.exe" angeben, dürfte unter Windows 7 standardmäßig
> 
> 
> ...


Kann ich ja später nochmal versuchen. Soll ich den Pfad zur JDK und zur jar.exe angeben?


Ich geh jetzt erstmal schlafen, trotzdem vielen Dank für eure bisherige Hilfe.


----------



## TheDarkRose (28. Dez 2011)

Ja wie sieht den die MANIFEST.MF in der jar aus?


----------



## irgendjemand (28. Dez 2011)

Camill hat gesagt.:


> Zum starten könnte man testweise den ganzen Pfad zur "jar.exe" angeben, dürfte unter Windows 7 standardmäßig C:\Program Files\Java\jdk1.*.*_**\bin\jar sein (deiner Version entsprechend anpassen).



OUCH

du weist schon das JAR lediglich der manager ist und NICHTS mit dem ausführen eines JAR zu tun hat oder ?

JAR-files werden immer noch mit java(w) ausgeführt

@TO

du hast in deinem beispiel den parameter "e" verwendet ...
dieser steht für "entry" und erspart dir das zusammenbauen eines eigenen manifest da dies automatisch generiert wird

wenn du also [c]jar vcef DeineMainClass deinjarfile.jar DeineMainClass.class[/c] auf der console eingibst wird ein jar mit dem namen "deinjarfile.jar" erstellt ...
in dieses wird dann das class-file "DeineMainClass.class" hinzugefügt ...
durch die option "e" wird zusätzlich das manifest mit dem "Main-Class" attribut generiert was in diesem fall auf "DeineMainClass" gesetzt wird ...

so sollte es funktionieren ... alternativ aber mal mit [c]java -jar deinjarfile.jar[/c] starten

ich denke nicht das es an irgendwelchen umgebungsvariablen liegt da diese nicht für diese fehler verantwortlich sind ... ich denke eher das es daran liegt wie du das jar zusammen baust ...

da du netbeans hast versuche dort doch mal ein "runnable JAR" zu exportieren ... dann macht ANT das ganze für dich ...

warum du allerdings einige jar-files hier aus dem forum nicht ausführen kannst liegt entweder daran das diese nicht dazu gedacht ausgeführt zu werden *lib's oder andere simple archive* oder falsch zusammengepackt wurden ...


----------



## jgh (28. Dez 2011)

mit was öffnet dein OS denn die JAR-Dateien?


----------



## AlphaVoice (28. Dez 2011)

irgendjemand hat gesagt.:


> wenn du also [c]jar vcef DeineMainClass deinjarfile.jar DeineMainClass.class[/c] auf der console eingibst wird ein jar mit dem namen "deinjarfile.jar" erstellt ...
> in dieses wird dann das class-file "DeineMainClass.class" hinzugefügt ...
> durch die option "e" wird zusätzlich das manifest mit dem "Main-Class" attribut generiert was in diesem fall auf "DeineMainClass" gesetzt wird ...


Hab ich gemacht, JAR-Datei lässt sich allerdings nicht öffnen. Die Konsole blitzt kurz mit dem Fehler auf und schließt sich dann sofort wieder.



irgendjemand hat gesagt.:


> so sollte es funktionieren ... alternativ aber mal mit [c]java -jar deinjarfile.jar[/c] starten


Funktioniert einwandfrei, über die Konsole geht es ja seltsamerweise.



irgendjemand hat gesagt.:


> da du netbeans hast versuche dort doch mal ein "runnable JAR" zu exportieren ... dann macht ANT das ganze für dich ...


Also es wurde jetzt mit "Clean and Build Main Project" 'ne neue JAR erzeugt (befindet sich im dist-Ordner), aber die lässt sich wie schon gesagt nicht ausführen.
Wo kann man denn bei NetBeans runnable JAR's exportieren? Ich sehe momentan nur eine Schaltfläche für's Importieren.



irgendjemand hat gesagt.:


> warum du allerdings einige jar-files hier aus dem forum nicht ausführen kannst liegt entweder daran das diese nicht dazu gedacht ausgeführt zu werden *lib's oder andere simple archive* oder falsch zusammengepackt wurden ...


Nein, sind keine Bibliotheken oder so. Ich kann die Datei im Startpost z.B. nicht öffnen: http://www.java-forum.org/codeschnipsel-u-projekte/129024-mathe-trainer.html



jgh hat gesagt.:


> mit was öffnet dein OS denn die JAR-Dateien?


Java(TM) Platform SE binary...
Aber wenn ich Minecraft und NetBeans öffnen kann, dürfte das doch egal sein, oder?


----------



## Camill (28. Dez 2011)

irgendjemand hat gesagt.:


> OUCH
> 
> du weist schon das JAR lediglich der manager ist und NICHTS mit dem ausführen eines JAR zu tun hat oder ?
> 
> JAR-files werden immer noch mit java(w) ausgeführt



Stimmt, da habe ich mich wohl vertippt - weiter oben steht es ja richtig


----------



## irgendjemand (28. Dez 2011)

@TO

also wenn ein terminal aufgeht werden .jar mit JAVA geöffnet .. das ist so aber falsch ... .jar sollten mit JAVAW geöffnet werden eben um das terminal nicht zu erzeugen ...
hier solltest du dringend die dateitypzuordnung ändern wenn du nicht immer ein terminal im hintergrund haben willst *was manchmal aber ganz praktisch sein kann*

wenn es via terminal geht dann dort vielleicht mal den log-output posten

mal ne ganz dumme frage : ist deine app eine terminal-app oder hat diese auch eine GUI ?
wenn GUI : wird diese auch richtige initialisiert und gestartet ?

es fehlen leider immer noch ein paar infos ...


ps : wenn du mir das jar aus dem verlinkten post mal wo uppen würdest *rapid / zippy* könnt ichs mal testen ... aber da man ja hier ohne regg keine attach laden kann -> pgh


----------



## AlphaVoice (28. Dez 2011)

irgendjemand hat gesagt.:


> also wenn ein terminal aufgeht werden .jar mit JAVA geöffnet .. das ist so aber falsch ... .jar sollten mit JAVAW geöffnet werden eben um das terminal nicht zu erzeugen ...


Ich WILL ja, dass meine App in der Konsole geöffnet wird (es soll ja der String "Hello World!" ausgegeben werden). Die Konsole öffnet sich kurz, zeigt die Fehlermeldung an und schließt sich danach sofort wieder.



irgendjemand hat gesagt.:


> wenn es via terminal geht dann dort vielleicht mal den log-output posten


Meinst du mit "log-output", den Fehler der angezeigt wird? Der steht im Startpost.



irgendjemand hat gesagt.:


> mal ne ganz dumme frage : ist deine app eine terminal-app oder hat diese auch eine GUI ?
> wenn GUI : wird diese auch richtige initialisiert und gestartet ?


Applikation für die Konsole



irgendjemand hat gesagt.:


> ps : wenn du mir das jar aus dem verlinkten post mal wo uppen würdest *rapid / zippy* könnt ichs mal testen ... aber da man ja hier ohne regg keine attach laden kann -> pgh


File-Upload.net - HelloWorld.jar


----------



## irgendjemand (28. Dez 2011)

sorry ... aber wenn du eine terminal-anwendung geschrieben hast musst du diese auch explizit mit einem terminal ausführen

http://www.java-forum.org/spezialthemen/18384-6-varianten-java-programme-starten-jar-bat-exe-cd.html

auch komisch finde ich deine beschriebung das mal eben ein terminal aufgeht und eine fehlermeldung anzeigt ...

1) unter windows gibt es speziell dafür javaw.exe ... diese datei ist speziell für runnable jar files gedacht und verhindert das ein terminal erzeugt wird ...
sollte das bei dir nicht der fall und .jar mit java.exe verknüpft sein stimmt da was mit deinen dateitypzuordnungen nicht

2) wenn du einen fehler bekommst ... dann poste diesen doch mal bitte ...
ich spiele nur ungern auf den beliebten witz mit der glaskugel an ... aber nur "erhalten fehlermeldung" oder "funktioniert nicht" sind KEINE fehlerbeschreibungen ...
wenn du also eine fehlermeldung erhälts dann poste diese auch

3) in der regel werden runnable jar files NICHT als terminal-app sondern als GUI geplant , konzipiert und entwickelt ...
will man unbedingt eine terminal-app schreiben so muss man dies auch dem user mitteilen und einem 0-8-15 user die möglichkeit geben *evtl erklären* das die app auch im terminal ausgeführt wird *siehe dazu verlinkten thread*
heißt also : wenn du eine terminal-app als runnable jar file publizierst muss diese auch immer aus einem terminal herraus aufgerufen werden ... andernfalls gibt es *unter normalen umständen die ja bei dir scheinbar nicht vorhanden sind* überhaupt kein terminal ...


vielleicht solltest du dir mal bei google "java ist auch eine insel" raussuchen und dies durch arbeiten da dir in diesem punkt scheinbar einige grundlagen fehlen ...


----------



## Kiri (29. Dez 2011)

Du kannst das alles mit folgender Klasse testen:


```
import javax.swing.JOptionPane;

public class HelloWorld {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "Hello World!!!");
    }
}
```

Diese als HelloWorld.java speichern.

Dazu folgende MANIFEST.MF im gleichen Ordner mit folgendem Inhalt speichern:

```
Main-Class: HelloWorld
[I]LEERZEILE[/I]
```

Dann über die Konsole in den Ordner der Java- und der MANIFEST-Datei wechseln.

Nun folgende Eingaben:


```
javac HelloWorld.java
```


```
jar -cfm HelloWorld.jar MANIFEST.MF HelloWorld.class
```

Die erzeugte jar-Datei sollte durch Doppelklick ein sichtbares Ergebnis liefern!


----------



## tuttle64 (29. Dez 2011)

AlphaVoice hat gesagt.:


> File-Upload.net - HelloWorld.jar



Bei mir kann die Jar-Datei problemlos gestartet werden und es wird "Hello World!" ausgegeben. Ich habe noch auf die Schnelle ins jar reingeschaut und es sieht alles gut aus.

Das Beispiel von Kiri hat übrigens auch wunderbar funktioniert.


----------



## pro2 (29. Dez 2011)

Probier mal:

Neue Datei erstellen, folgenden Inhalt:

```
Windows Registry Editor Version 5.00
 [-HKEY_CLASSES_ROOT\.jar]
 [-HKEY_CLASSES_ROOT\SystemFileAssociations\.jar]
 [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar]
```
Als xxx.reg abspeichern und ausführen. 

Dann cmd als Admin ausführen und folgendes eingeben:


```
assoc .jar=JARFile
```
und danach

```
ftype JARFile="JAVA_PFAD" -jar "%1"
```

den JAVA_PFAD dabei ersetzen (die "" bleiben!) durch den Pfad zu deiner javaw.exe, also bei mir z.B. 

```
D:\Program Files\Java\jre7\bin\javaw.exe
```

Quelle


----------



## AlphaVoice (29. Dez 2011)

pro2 hat gesagt.:


> ```
> assoc .jar=JARFile
> ```


Geht leider nicht, in der Konsole kommt:
"Zugriff verweigert. Folgender Fehler trat auf: .jar."
Und ja, ich führe diesen Befehl als Administrator aus.

*// Edit:* OK, ich hab das jetzt ausgeführt, aber aus welchem Grund auch immer passiert bei Doppelklick jetzt gar nichts mehr. Konsole wird ebenfalls nicht mehr geöffnet.


----------



## pro2 (29. Dez 2011)

Sicher, dass du alles richtig  hast? Den richtigen Pfad genommen? Hatte ein ähnliches Problem und danach hat alles funktioniert..


----------



## AlphaVoice (29. Dez 2011)

Vielleicht sollte ich die JRE einfach nochmal neu installieren? Pfade hab ich eigentlich richtig angegeben.


----------



## AlphaVoice (30. Dez 2011)

Sorry für den Doppelpost, aber darf ich nochmal kurz zusammenfassen?

- JRE und JDK wurden anscheinend korrekt konfiguriert
- meine Programme laufen bei anderen Mitgliedern aus diesem Forum ohne Probleme
- ich selbst kann Java-Programme über die Konsole manuell einwandfrei starten (java -jar HelloWorld.jar) 
- bei Doppelklick passiert nichts, obwohl es sich um ein "Executable Jar File" handelt und ich die Datei mit der javaw.exe öffne

Naja, wenn mir niemand helfen kann, muss ich wohl selbst irgendwie drauf kommen.

*// Edit:* Hm, langsam verstehe ich gar nichts mehr. Die GUI-Anwendung auf dieser Website kann ich problemlos öffnen und ausführen...


----------



## irgendjemand (30. Dez 2011)

noch mal als ausdrücklicher hinweis

wenn du von deiner [c]public static void main(String[])[/c] weder eine GUI initialisierst noch diese richtige "startest" oder du überhaupt keine GUI verwendest *terminal app* dann wird dir JAVAW.EXE *welches standardmäßig mit ".jar" verknüpft wird* NICHTS präsentieren ...

wenn du eine terminal app schreibst musst du diese auch vom terminal ausführen

wenn du eine GUI app schreibst musst du dafür sorgen das die GUI auch komplett initialisiert und richtig "gestartet" / angezeit wird


google dir bitte mal "java ist auch eine insel" und arbeite es bis zu deinem problem durch da dir scheinbar nötige grundlagen fehlen


----------



## GUI-Programmer (30. Dez 2011)

Nochmals: Konsolenprogramme, also Programme mit 
	
	
	
	





```
System.out.println("Irgendwas");
```
 müssen (in der Regel) auch per Konsole gestartet werden. Bei einen Doppelklick auf eine executable jar passiert folgendes: Es wird keine Konsole geöffnet, da auch nicht Zweck der Jar, das Programm abgearbeitet (bei einer Zeile in der main - Methode entsprechend in einem winzigen Bruchteil einer Sekunde) und dann beendet. Somit ist der Prozess javaw (vielleicht sogar) ganz kurz im Taskmanager zu sehen.

Konsolenausgaben sind eigentlich nur dafür da:
 - Javaanfängern erste Konsolenprogramme schreiben zu lassen, um die Programmiersprache zu erlernen 
 - Das Programm beim Programmieren in Zwischenphasen zu testen
 - Beim Testen Fehlermeldungen auszugeben

Wenn du eine GUI wie die absolute minimalst GUI von Kiri

```
import javax.swing.JOptionPane;
 
public class HelloWorld {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "Hello World!!!");
    }
}
```
erstellst, sollte es (zumindest unter Windows XP und 7) auch standartmäsig per Doppelklick funtkionieren die Jar auszuführen.


----------



## AlphaVoice (30. Dez 2011)

Hm tatsächlich, das funktioniert.
Aber was ist wenn ich Anwendungen auf Basis der Konsole programmieren will und die dann an andere Leute weitergeben will, die von all dem keine Ahnung haben? 
Gibt es denn keinen Dateityp, der Java-Programme bei einem Doppelklick gleich in der Konsole ausführt?
Alternativ könnte ich auch eine BAT-Datei nutzen und die Datei damit aufrufen, aber das ist auch blöd, weil ich den Leuten dann zwei Dateien mitgeben müsste.

Dachte, das würde einfacher gehen.


----------



## irgendjemand (31. Dez 2011)

AlphaVoice hat gesagt.:


> Gibt es denn keinen Dateityp, der Java-Programme bei einem Doppelklick gleich in der Konsole ausführt?
> 
> Dachte, das würde einfacher gehen.



NEIN und NEIN

wenn du eine terminal-app programmierst MUSS diese auch via terminal gestartet werden *wie das geht habe ich dir verlinkt* ...

ansonsten : GUI ...


einen anderen weg gibt es nicht *zumindest nicht für leute die keien ahnung haben ... und für die die ahnung haben würde entweder in frage komme ".jar" mit JAVA.EXE zu starten oder *was wahrscheinlicher ist* diesen gleich zu sagen das diese app via terminal gestartet werden muss ...

wenn du EIN *oder mehrere* JAR-files dierekt per doppelklick ausführen willst ... obwohl die enthaltene app als terminal-app programmiert ist ... gibt es 3 möglichkeiten

1) via terminal ausführen
2) ".jar" mit "java.exe" ausführen -> terminal nur während der runtime ... daher mindestens ein blockierenden thread
3) GUI programieren ...

es gibt zwar eine möglichkeit mit der klasse "Consonle" eine console ANZUFORDERN ... aber ob diese wirklich bereitgestellt wird oder gar so verwendet werden kann wie gewünscht IST NICHT GARANTIERT -> doc


----------



## GUI-Programmer (31. Dez 2011)

> Aber was ist wenn ich Anwendungen auf Basis der Konsole programmieren will und die dann an andere Leute weitergeben will, die von all dem keine Ahnung haben?



Dann musst dir entweder selbst eine eigene GUI basteln, in der eine JTextArea oder JEditorPane als Konsole benutzt wird --> Google und/oder Forensuche wirst du sicherlich was dazu finden - oder die anderen Leute sollten einen kleinen Anteil an Ahnung mitbringen.

Aber: Man programmiert in der Regel keine Konsolenanwendung.

Falls zum Testen: Auch wenn ich BlueJ keinen zum Java lernen empfehlen würde, bietet es sich hierfür an:
Lass bei denen BlueJ installieren und gib ihnen deinen BlueJ Ordner zum "per BlueJ ausführen".

Aber dennoch zum Java erlernen mein persönlichen Tipps (gibt da ja die unterschiedlichsten Meinungen):
1. Nach vollständiger, und richtiger Installation von Java (JDK mit JRE) mit PATH und evtl. CLASSPATH - Variable, erstmal ein paar Programm normal mit Syntax-Editor wie etwa Notepad++ oder Programmers Notepad und über die Konsole compilieren und ausführen (wie du das ja momentan machst). Bis du einigermaßen mit den Grundtypen und den objektorientierten Prinzip von Java vertraut bist, sowie die meisten der gänge Klassen anwenden kannst.
2. Danach würde ich eine (ruhig vollgepackte) IDE wie Eclipse (mein Favorit) oder NetBeans verwenden, da diese Vorschläge usw. anbietet und Compilerfehler schon beim Erstellen anzeigt. Und zudem noch einen vernünftigen GUI-Builder bestitzt, (wobei ich den WindowBuilder bei Eclipse persönlich deutlich besser finde). Wobei ich auch dazu sagen muss, dass du erst ein paar GUIs "per Hand" ohne GUI-Builder erstellen solltest, damit du AWT und Swing besser kennen lernst.

Das Ganze kann möglicherweis auch leichter fallen unter der Verwendung von einem Buch oder den Video-Tutorials.


Nun aber genug über das Java-Lernen gelabert!!!


mfg GUI-Programmer


----------



## jojonice (28. Jul 2012)

tried this for days now^^ javaw.exe does the trick  THX!!! never heard of that


----------

