Java-Programme starten - Möglichkeiten: Unterschied zwischen den Versionen
K (→Programme, die EXE-Dateien zum Starten von JAVA-Anwendungen erstellen) |
K (→Programme, die EXE-Dateien zum Starten von JAVA-Anwendungen erstellen) |
||
Zeile 167: | Zeile 167: | ||
Dabei wird der [[Bytecode]] von einer EXE-Datei gestartet. Man hat dann neben der Jar-Datei, die die [[Klasse|Klassen]] des Programms enthält, eine EXE-Datei, die das Java-Programm letztendlich startet. Man braucht also auf jeden Fall trotzdem eine [[JVM]], um die benötigten Klassen für das Java-Programm bereitzustellen. | Dabei wird der [[Bytecode]] von einer EXE-Datei gestartet. Man hat dann neben der Jar-Datei, die die [[Klasse|Klassen]] des Programms enthält, eine EXE-Datei, die das Java-Programm letztendlich startet. Man braucht also auf jeden Fall trotzdem eine [[JVM]], um die benötigten Klassen für das Java-Programm bereitzustellen. | ||
− | Vertreter sind zum Beispiel [http://sourceforge.net/projects/jestart/ JEStart von Xenoage], [https://www.olison.com/sites/jmadex.php JMadex] [http://jsmooth.sourceforge.net/ JSmooth] oder [http://launch4j.sourceforge.net/ Launch4J]. | + | Vertreter sind zum Beispiel [http://sourceforge.net/projects/jestart/ JEStart von Xenoage], [https://www.olison.com/sites/jmadex.php JMadex], [http://jsmooth.sourceforge.net/ JSmooth] oder [http://launch4j.sourceforge.net/ Launch4J]. |
'''PRO''' | '''PRO''' |
Version vom 23. März 2019, 09:57 Uhr
Inhaltsverzeichnis
Start im Terminal bzw. in der Eingabeaufforderung
Eine Java-Quellcode-Datei besitzt immer den Suffix .java
. Der Compiler übersetzt den Quellcode in Bytecode und legt diesen in einer Datei mit dem Klassennamen und dem Suffix .class
ab.
Bytecode-Dateien
Die class-Datei enthält also ausführbaren Code. Damit ein Java-Programm nun gestartet werden kann, muss die Klasse, die die main()-Methode enthält, dem Java-Interpreter zur Ausführung übergeben werden. Der Aufruf des Java-Interpreters zum Start eines Java-Programms namens HelloWorld.class
sieht dann so aus:
java HelloWorld
PRO
- Startet jedes Java-Programm, wenn eine passende JRE für das Host-System verfügbar ist
- plattformunabhängig
CONTRA
- Bei mehreren Klassen muss die Hauptklasse bekannt sein (Klasse mit der main()-Methode)
- Es muss die interne Package-Struktur bekannt sein, sofern es eine gibt
- Java ist nicht abwärts kompatibel
- Aufruf kann unhandlich sein
JAR-Dateien
JAR-Dateien sind prinzipiell Dateien, die im ZIP-Format erzeugt wurden und weitere Informationen enthalten können, die der Java-Interpreter zur Ausführung der in der JAR-Datei gespeicherten Java-Anwendung benötigt. Dabei unterscheiden wir in Bibliotheks-Dateien, die ein Java-Programm mit externen Funktionen erweitern und ausführbaren JAR-Dateien, die per Doppelklick gestartet werden können, wenn die Dateiendung im Betriebssystem mit dem Java-Interpreter verknüpft wurde.
Java-Anwendungen, die in JAR-Dateien abgelegt sind, können auch im Terminal bzw. der Eingabeaufforderung gestartet werden.
java -jar MeinProgramm.jar
Alle derzeit erhältlichen großen IDEs wie bspw. Eclipse, NetBeans, JDeveloper etc. sind bereits mit einer Funktion zum komfortablen Erzeugen einer JAR-Datei aus Quellcode ausgestattet. Auch einige Java-Editoren bieten diese Funktion an. Darunter bspw. der Java Editor und der JCreator.
Natürlich kann man auch Jar-Dateien manuell in einer Befehlszeile erzeugen oder dafür ein Skript einspannen.
PRO
- Diese Dateien sind in jedem Falle unter jedem Betriebssystem ausführbar, für das eine passende JRE verfügbar ist.
- Die so erstellten JAVA-Programme sind plattformunabhängig!
CONTRA
- Java ist nicht abwärts kompatibel
- Man sollte beachten, dass man als unerfahrener 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 die JAR-Datei trotzdem aus Versehen 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!
Man kann natürlich auch einfach in den Einstellungen von WinRAR unter "Integration" den Haken bei .jar Dateien entfernen, oder die .jar-Datei per rechte Maustaste -> öffnen mit -> Java öffnen.
Java-Applets
Java-Applets sind kleine Programme, die die Funktionalität von Webseiten erweitern können. Sie werden als Class-Datei oder JAR-Datei in eine Webseite eingebunden und vom Webbrowser ausgeführt.
PRO Plattformunabhängig
CONTRA
- Applets gelten als unsicher
- Einschränkte Funktionalität
- Ein passendes Browser-Plugin wird zur Ausführung benötigt, (Java ist nicht abwärts kompatibel)
- Die Unterstützung von Applets ist seit Java 9 aus dem JDK entfernt
- Nur noch wenige Browser-Hersteller unterstützen Java-Applets
Java Webstart
Java Web Start (TM) ist eine Technologie, die zunächst über Erweiterungen von Java mit Java 1.2 Einzug in die Sprache gehalten hat. Seit Java 5 ist Webstart Teil der API und somit im JRE enthalten.
Java Webstart kann zum unkomplizierten Herunterladen, Installieren und Updaten von Java-Programmen eingesetzt werden.
Der Mechanismus basiert auf JNLP-Dateien, die im XML-Format die benötigten Informationen für den Browser und die JRE bereit stellen.
PRO
- Java Webstart funktioniert völlig plattformunabhängig und umfasst viele Funktionen, die man bei "normalen" Software-Installationen auch findet.
- Auch das Herunterladen einer passenden JRE ist vor der Installation des Java-Programms möglich.
- Es kann eine bestimmte, vorausgesetzte JRE in der JNPL-Datei eingestellt werden.
- Es kann ein Icon für das Programm angezeigt werden.
CONTRA
- Es wird ein Webserver benötigt, der das JNLP-Protokoll unterstützt.
- Java Webstart ist seit Java 11 nicht mehr Teil des JDK/JRE.
Eine Batch-Datei (kurz .bat)
Dabei erstellt man mit dem Compiler nur die Class-Dateien. Beim Klicken auf die BAT-Datei startet dann dementsprechend das eigene Programm. Wichtig: Damit das funktioniert, muss dem System der Pfad zum JRE bekannt sein und die Bat-Datei muss im Verzeichnis der Class-Dateien liegen.
PRO
- Hier ist eigentlich kein großeres PRO zu bennenen, außer dass man sein Programm jetzt mittels BAT-Datei (Stapelverarbeitungsdatei) startet. Das geht auf der Console durch Aufruf der Batchdatei oder auch per Doppelklick auf die Datei.
CONTRA
- Batch-Dateien lassen sich nur von Windows aus ausführen! Außerdem kommt das mit den Bat-Dateien langsam aus der Mode, unter anderem, weil Jar-Dateien wesentlich flexibler sind.
- Wenn man mal ein aktuelleres JRE installiert, funktioniert unsere Bat-Datei erst nach anpassen des Pfades zum JRE wieder.
Für Linux:
#!/bin/sh java MainProgramm
Falls notwendig, muss die Jar-Datei als ausführbar gekennzeichnet werden:
chmod +x <Dateiname der ShellDatei>
PRO
- Wenn man die Datei mit vollem Pfad angibt und in das /usr/local/bin Verzeichnis kopiert, kann man die Datei einfach nur mit dem Dateinamen (MainProgramm) aufrufen, aber sonst gibt es da auch kein großartiges Pro.
CONTRA
- Das geht dann halt nur unter Linux. Aber wenn man dazu noch eine Batchdatei legt, hat man schon zwei Plattformen abgedeckt.
Für Windows sieht das folgendermaßen aus:
rem * Pfad zur JRE einstellen (Bitte anpassen!) set path=.;C:\Programme\Java\jre1.6.0\bin
Danach folgende Zeilen, je nach Situation hinzufügen, die Datei speichern und ausführen
rem * Starten einer Java-Klasse Bsp. MeinProgramm.class java MeinProgramm
oder
rem * Starten eines Programms aus einem Jar-Archiv mit Konsolenausgabe java -jar MeinProgramm.jar pause
oder
rem * Starten eines Programms aus einem Jar-Archiv ohne Konsolenausgabe javaw -jar MeinProgramm.jar
Verknüpfungen
(Desktop-)Shortcuts sind unter Linux eine verbreitete Möglichkeit, um Java-Programme zu starten. Unter Windows sind sie vergleichbar mit Verknüpfungen, denen man alle Parameter zum Starten eines Java-Programms einpflanzt.
PRO
- Kinderleichte Handhabung, eine Verknüpfung kann jeder anlegen. Ähnlich wie bei Batch-Dateien, können alle benötigten Parameter mitgegeben werden.
CONTRA
- Sehr statisch, sind nur für dieses eine Programm angelegt. Jedes weitere Programm benötigt eigene Verknüpfungen.
Programme die aus dem Bytecode Maschinencode erstellen
Dieser Maschinencode ist dann in so "EXE-Dateien" oder "DLL-Dateien" abgespeichert. Programme, die das können nennt man Native Code Compiler. Ein solches Programm ist z.B. Excelsior JET (kostenpflichtig)
PRO
- Wie gesagt es handelt sich nach der Compilierung um eine echte EXE-Datei.
- Es kompiliert neben deinem eigenen Programm auch noch die gesamte JRE und erzeugt daraus eine binäre Datei.
CONTRA
- Aus meiner Erfahrung her, kann ich nur sagen : "Leute lasst die Finger von sowas!". Hier die Begründung: Die Installation von Programmen wie Excelsior JET dauert deutlich länger, als gewohnt, weil zunächst das JRE kompiliert wird. 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-100 MB), zu den 25-100 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 selbst geschriebenes Programm mit 200KB und >80MB Runtimes! Das lohnt sich wirklich nicht!
- Die Plattformunabhängigkeit geht dadurch auch verloren. Oftmals unterstützen Native Code Compiler auch nicht die aktuellen JDKs.
Programme, die aus dem Quellcode Maschinencode erstellen (sog. ahead-of-time compiler)
Es gibt auch noch eine etwas einfachere Möglichkeit: Am ehesten findet man da den GCJ, den Java Compiler aus der GNU Compiler Collection. Mit diesem ist es relativ problemlos möglich Java-Quellcode zu Maschinencode zu kompilieren:
gcj --main=Foo -o Foo Foo.java
Mit --main
wird die Klasse mit der main Methode spezifiziert, -o
gibt den gewünschten Namen der kompilierten Datei an. Ob das unter Windows so ohne Weiteres funktioniert, weiß ich leider nicht, ich benutze Linux.
PRO
- Es wird eine JRE-unabhängige, ausführbare (unter Windows .exe) Datei erzeugt.
CONTRA
- Die Datei ist nicht mehr plattformunabhängig und GJC unterstützt nach eigenen Angaben einige Teile der Java Bibliotheken noch nicht.
Programme, die den JAVA-Quellcode in C++-Quellcode umwandeln
Mit einem C++ Compiler kann man dann den C++-Quelltext zu einer EXE-Datei (Maschienencode) kompilieren. Diese Variante ist also eine Art Übersetzer von Java zu C++.
Ein Programm, was das kann, heißt: Ja2dol (Freeware, OpenSource-Projekt) bzw. das Nachfolge-Projekt Java2CPP
PRO
- Man erhält eine lauffähige EXE-Datei, und man braucht so gut wie keine Runtime-Bibliotheken. Des Weiteren erhält man den in C++-Quellcode umgeformten Code des Java-Programms.
CONTRA
- Wie das so mit Übersetzungstools ist, stimmt die Grammatik hinterher nicht unbedingt 100%ig. Das wird vor allem bei größeren Programmen sichtbar und es kommt zu Fehlern. Man sollte also auch ein wenig C++-Kenntnisse haben, um die Übersetzungsfehler korrigieren zu können. Die Übersetzung von "Ja2doll" ist aber schon recht akzeptabel.
- Die Plattformunabhängigkeit geht bei EXE-Dateien verloren.
FAZIT Auf Grund der hohen Fehlerdichte nicht zu empfehlen für die produktive Umgebung.
Programme, die EXE-Dateien zum Starten von JAVA-Anwendungen erstellen
Dabei wird der Bytecode von einer EXE-Datei gestartet. Man hat dann neben der Jar-Datei, die die Klassen des Programms enthält, eine EXE-Datei, die das Java-Programm letztendlich startet. Man braucht also auf jeden Fall trotzdem eine JVM, um die benötigten Klassen für das Java-Programm bereitzustellen. Vertreter sind zum Beispiel JEStart von Xenoage, JMadex, JSmooth oder Launch4J.
PRO
- Per Klick auf die EXE-Datei startet das Programm, wobei das Programm (EXE-Datei) sehr klein bleibt.
- Meist kann man ein Icon für die Exe-Datei festlegen.
- Plattformunabhängigkeit bleibt erhalten. Auf einem Linux-System kann immer noch die Jar-Datei ausgeführt werden.
CONTRA
- Man braucht, wie oben beschrieben, eine JVM (sollte aber in der heutigen Zeit schon auf fast jedem PC drauf sein).
- Die Exe-Datei startet u.U. nur auf einem Windows-System.
- Linux-Benutzer brauchen dann wieder eine ausführbare JAR-Datei oder eine Shell-Datei zum Start.
Anmerkungen zum Thema Maschinencode
Zunächst einmal ist es sehr einfach ausgedrückt, zu behaupten, "EXE-Dateien" sowie "DLL-Dateien" seien allgemein "Maschinencode". Das ist zwar für sich betrachtet nicht falsch, jedoch gibt es weitere Fälle bei denen der Begriff "Maschinencode" Anwendung findet, und somit nicht hierauf beschränkt genannt werden sollte.
(Mir) bekannte Native-Compiler sind der bereits genannte Excelsior JET für Windows- und Linux-Systeme sowie der GNU Compiler for Java (GCJ) der GNU Compiler Collection. Ersterer ist in der Tat kostenpflichtig und bereits in Demo-Version vollstens einsetzbar. Zweiterer ist wie vom GNU-Projekt bekannt vollständig frei und kostenlos verfügbar und auf verschiedene Systeme portiert.
Allgemeine Vor- und Nachteile eines Native-Code-Programms: + Da Maschinencode, schnelle(re) Ausführung des Programms + keine "Mogelpackung" (s.u.) - Verlust der Plattformunabhänigkeit
(Anm. zu 2. '+': Einigen Programmieren (auch Nutzer) behagt der Gedanke nicht, ein Programm auszuliefern, dass im eigentlichen Sinne keines ist [sondern eben Bytecode, also gewissermaßen ein eigenes computerähnliches System braucht, um ausgeführt zu werden].) Excelsior JET In der Tat ist es so, dass dem von Excelsior JET kompilierten Programm/Programmbibliothek, sollte es auf einen anderen Rechner portiert werden, (ausschließlich!) die Laufzeit-Bibliotheken (die das Programm benötigt) beigefügt werden müssen (oder es ist eine JET Installation auf dem Rechner vorhanden), um es letztendlich ausführen zu können. Tatsächlich beginnt deren Größe mit 50 MiB und steigt abhängig von den benutzten Klassen, wobei anzumerken ist, dass meine Programm-Laufzeit-Bibliotheken niemals 60 MiB überschritten haben. Es ist durchaus ein gewaltiger psychologischer Anstieg von einem 50-200 KiB großem Programm zu etwa 60 MiB Laufzeit, allerdings ist dem im Zeitalter von DSL und Terabyte-Festplatten keine allzu große Bedeutung zuzusprechen. Darüber hinaus sind die angesetzten 2 Stunden der Installation bei Weitem zu hoch. 5 Minuten maximal sind erforderlich.
Wie schon genannt ist die Benutzerführung, wenn auch vom üblichen Windows-Bild abweichend, und Funktion ansprechend bzw. umfassend, was das Programm selbst gut verwendbar machen lässt, zudem kann sich das Ergebnis mehr als sehen lassen.
Programmeinschränkungen gegenüber der Vollversion: Die einzigen Beschränkungen, die der "JET" hat, sind die ausgewählte Verwendbarkeitsdauer (30 Tage ohne Registrierung / 90 Tage mit) und ein kleines Hinweisfenster nach Beenden des kompilierten Programms. Andernfalls sind die Programme jederzeit einsetzbar.
GNU Compiler for Java (GCJ) Zu diesem kann ich eigentlich nicht sonderlich viel sagen, da er (MinGW Windows Portierung) meine (syntaktisch korrekten) Programme bislang nicht kompilieren konnte, und ich ihn aufgrund dessen meide.
Fazit Der "JET" ist in jedem Fall einen Blick wert. Wer sich des GCJ annehmen möchte, der möge das tun, sollte aber keine allzu große Benutzerfreundlichkeit erwarten.
Ein ähnliches Konzept verfolgt das Tool Bat To Exe Converter. Allerdings wird hier eine Batchdatei in eine Exe-Datei verwandelt. Das heißt, man schreibt die Startbefehle für das Java-Programm in eine Batchdatei, aus welcher dann von Bat To Exe Converter eine Exe-Datei inkl. benutzerdefiniertem Icon erzeugt wird.
Java-Programm von CD oder USB-Stick starten
Man kann Java-Programme auf einem Zielrechner ohne JRE direkt von einer CD starten, die nach dem Einlegen ins CD-Laufwerk automatisch auf einem Windows-System mit der Ausführung beginnen.
Das Interessante daran: Der Zielrechner braucht nicht mal eine JRE installiert zu haben, denn diese liegt gleich mit auf der CD.
Hinweis: Ab Java 6 wird Windows 98 und Windows ME nicht mehr unterstützt, es müsste in diesem Fall also eine ältere JRE benutzt werden.
PRO Die Anwendung ist relativ unabhängig von jeglichen Betriebssystemen, so lange eine passende JRE auf der CD mitgeliefert wird.
CONTRA Die Anwendung benötigt zum Laden und während der Ausführung auf Grund des langsamen Laufwerks etwas mehr Zeit.
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Autoren: