# JAVA - EXE.cutabel



## Iome (27. Jun 2005)

Hier mal ein paar Tipps und Hinweise, wie man ein JAVA Executable macht. Vorweg es gibt mehrere Methoden, einige sind weniger empfehlenswert, andere mehr!

*Methoden um EXE-Dateien zu erstellen:*
1. Man erstellt sich ein JAVA-Archiv, so genannte "JAR-Dateien".

*PRO*
Diese Dateien sind in jedem Falle von jedem Betreibssystem ausführbar, somit bleiben die erstellten JAVA-Programme plattformunabhängig!

*CONTRA*
Man sollte beachten, dass man als unerfahrender Benutzer die JAR-Dateien nicht mit Programmen wie WinRar verknüpft, denn sonst kann man die Programme (JAR-Dateien) nicht mehr beim anklicken starten! Sollte man man die JAR-Datei trotzdem ausversehen mit einem Packer verknüpft haben, dann kann man JAR-Dateien (bei Windows) nur noch mittels BAT-Datei oder über START->Ausführen und dann mit "javaw -jar meine_jar_datei.jar" starten. Wem das zu umständlich ist, der muss einen Schlüssel in der Registry setzen!
_Für erfahrene Leute, die wissen wie man mit der Registry unter Windows umgeht:_
Man muss einen Schlüssel mit einem Binärwert unter "HKEY_CLASSET_ROOT" -> "Applications" -> "javaw.exe" -> "shell" -> "open" -> "command" eintragen mit dem Wert (Anführungszeichen mit eintragen!!!): "C:\Programme\Java\jre1.5.0_01\bin\javaw.exe" -jar "%1" %*
(Der Pfad der JRE ist natürlich bei jedem variabel, dies ist nur der Standardpfad!)

*--------------------*

2.Man erstellt sich eine BATCH-Datei (kurz .Bat) und schreibt in die Datei "java mein_javaprogramm". Dabei erstellt man mit dem Compiler nur die Class-Dateien. Beim klicken auf die BAT-Datei startet dann dementsprechend das eigene Programm.

*PRO*
Hier ist eigentlich kein großeres PRO zu bennenen, außer dass man sein Programm jetzt mittels BAT-Datei (Stapelverarbeitungsdatei) startet.

*CONTRA*
BATCH-Datei lassen sich nur von Windows aus ausführen! (denke ich mal, wenn ich falsch liege, dann korrigiert mich bitte). Außerdem kommt das mit den BAT-Dateien langsam aus der Mode!

*--------------------*

3.Es gibt Programme die aus dem Bytecode Maschienencode erstellen. Dieser Maschienencode ist dann in so "EXE-Dateien" oder "DLL-Dateien" abgespeichert. Programme, die das können nennt man "NATIVE-CODE-COMPILER"!

Ein Programm was sowas kann heißt:
Excelsior JET (leider als Download nur als TRIAL-VERSION erhältlich!)

*PRO*
Wie gesagt es handelt sich nach der Compilierung um eine echte EXE-Datei.

*CONTRA*
Aus meier Erfahrung her, kann ich nur sagen : "Leute lasst die Finger von sowas!". Hier die Begründung: Die Installation von Programmen wie Excelsior JET dauert bei einem 2GHz PC um die 2 Stunden. Die Bedienung ist meist leicht. Die Programme sind nur dann auf anderen Computern ausführbar, wenn alle Runtimes von dem entsprechenden Native-Compiler auf dem anderen PC sind (so um die 25 MB), zu den 25 MB kommt dann nochmal die gesamte JRE dazu (die als Bundle mitgeliefert wird). Das sind dann nochmal je nach JAVA-Version so um die 70 MB. Dann hat man vielleicht ein selbsgeschriebenes Programm mit 200KB und 95MB Runtimes! Das lohnt sich wirklich nicht! Die Plattformunabhängigkeit geht dadurch auch verloren.

*--------------------*

4. Als Alternative zur 3. Variante, gibt es Programme, die den JAVA-Quellcode in C++-Quellcode umwandeln, mit einem C++ Compiler kann man dann den C++-Quelltext zu einer EXE-Datei (Maschienencode) compilieren.

Ein Programm was das kann heißt:
Ja2dol (Freeware, OpenSource-Projekt)

*PRO*
Man erhält eine lauffähige EXE-Datei, und man brauch so gut wie keine Runtimes, desweiteren erhält man einen C++-Quellcode. Diese Variente ist also eine Art Übersetzer von Java zu C++.

*CONTRA*
Wie das so mit Übersetzungstools ist stimmt die Grammatik hinterher nicht unbedingt 100%. Das wird vor allem bei größeren Programmen sichtbar und es kommt zu Fehlern. Man sollte also auch ein wenig C++-Kentnisse haben um die Übersetzungsfehler korriegieren zu können. Die Übersetzung von "Ja2doll" ist aber schon recht akzeptabel. Die Plattformunabhängigkeit geht bei EXE-Dateien verloren und man kann die EXE-Dateien nicht mehr richtig dekompilieren, was ja noch bei Class-Dateien ging.

*-----------------------*

5. Es gibt Programme, die EXE-Dateien aus JAVA-Anwendungen erstellen, dabei wird der Bytecode in die EXE-Datei eingebunden. Man hat dann eine EXE-Datei, braucht aber trotzdem eine JVM um die EXE-Datei auszuführen.

[p]PRO[/b]
Per Klick auf die EXE-Datei startet das Programm, wobei das Programm (EXE-Datei) sehr klein bleibt.

*CONTRA*
Man braucht, wie oben beschrieben, eine JVM (sollte aber in der heutigen Zeit schon auf fast jedem PC drauf sein). Ansonsten geht nur die Plattformunabhängigkeit verloren.


*Meine beliebtesten Varianten sind:*
->Platz 1: Variante 5
->Platz 2: Variante mit dem JAR (JAVA-Archiv)
->Platz 3: Java zu C++


----------



## Guest (27. Jun 2005)

Ja2dol klingt interessant. Wird gleich ausprobiert.  Danke für den Tip. 
	

	
	
		
		

		
			




Bisher verwende ich fast ausschliesslich JAR + LNK (Windoof Verknüpfung)


----------



## robertpic71 (27. Jun 2005)

Zu 1: Hier sollte man noch folgendes hinzufügen:



> Zusätzlich muss in dem .jar-Archive eine Manifest-Datei enthalten sein (z.B. mit Namen "MyProgr.mf"), aus der hervorgeht, welche Klasse die main-Methode enthält. Sie kann z.B. so aussehen:
> Manifest-Version: 1.0
> Main-Class: MyProgr
> Das .jar-Archive kann z.B. mit folgendem Kommando erstellt werden:
> jar cfm MyProgr.jar MyProgr.mf *.class *.jpg *.au



Ich kombiniere eigentlich immer 1. und 5. Wer kein kein Exe-File braucht, soll halt das JAR starten.

Für 5. verwende ich das OpenSource-Tool "JSmooth". Damit habe ich unter Windows gleich ein eigenes Symbol und einen Programmnamen <> "java.exe" im Taskmanager. 

Abgesehen davon, kann man einen Download-Link angeben, falls keine JVM gefunden wird. Also damit sollte die Installation und Ausführung auch für Dummies kein Problem darstellen.

LG Rob


----------



## KSG9|sebastian (28. Jun 2005)

Sehr guter Beitrag, ich pack ihn mal in die FAQ...


----------



## KSG9|sebastian (28. Jun 2005)

Herzlichen Danke Iome...

-> http://www.java-forum.org/de/viewtopic.php?p=116904


----------



## thE_29 (28. Jun 2005)

Hab den Beitrag editiert, da die LEERZEILE in der Manifest.MF mal wieder vergessen wurde!


----------



## 8ull23y3 (28. Jun 2005)

> 5. Es gibt Programme, die EXE-Dateien aus JAVA-Anwendungen erstellen, dabei wird der Bytecode in die EXE-Datei eingebunden. Man hat dann eine EXE-Datei, braucht aber trotzdem eine JVM um die EXE-Datei auszuführen.
> 
> [p]PRO[/b]
> Per Klick auf die EXE-Datei startet das Programm, wobei das Programm (EXE-Datei) sehr klein bleibt.
> ...



Ähem... die Plattformunabhängigkeit geht in jedem Fall verloren weil ich kein anderes System kenne welches exe Dateien ausführen kann


----------



## thE_29 (28. Jun 2005)

Unter Linux mit WINE/X 

Und zu den BAT Dateien könnte man noch sagen, das dort die Plattformunabhängigkeit eigentlich net verloren geht 

entweder du benennst es in .sh um oder startest es gleich via ./ dann gehts auch unter Linux (rechte halt setzen).


----------

