Inselupdate: Native Compiler und Wrapper
Native Compiler
Eine in Java geschriebene Applikation lässt sich erst einmal nur mit einer Java Laufzeitumgebung ausführen. Einige Hersteller haben jedoch Compiler entwickelt, die direkt unter Windows oder einem anderen Betriebssystem ausführbare Programme erstellen. Die Compiler, die aus Java-Quelltext – oder Java-Bytecode – Maschinencode der jeweiligen Architektur erzeugen, nennen sich native oder Ahead-Of-Time Compiler. Das Ergebnis ist eine direkt ausführbare Datei, die keine Java Laufzeitumgebung nötig macht. Je nach Anwendungsfall kann das Programm performanter sein, eine Garantie ist es allerdings nicht. Die Startzeiten sind im Allgemeinen geringer und das Programm ist viel schwieriger zu entschlüsseln, was das Reverse Engineering angeht.
Ein freier Compiler unter der GNU-Lizenz ist gcj (http://gcc.gnu.org/java/); ein kommerzieller Vertreter ist Excelsior JET (http://www.excelsior-usa.com/jet.html). Das viele Hersteller ihre Produkte einstellt haben, ist sicherlich ein Zeichen dafür, dass die existierenden Laufzeitumgebungen mittlerweile ausreichende Geschwindigkeit, Speicherverbrauch und Startzeiten zeigen.
Einpacken von Java-Programmen
Wer Java-Programme vertreibt, weiß um das Problem der JVM-Versionen, Pfade, Start-Icon, Splash-Screen und so weiter. Eine Lösung ist, einen Wrapper zu bemühen, der sich als ausführbares Programm wie eine Schale um das Java-Programm legt. Der Wrapper ruft die virtuelle Maschine auf und übergibt ihr die Klassen. Es ist also immer noch eine Laufzeitumgebung nötig, doch lassen sich den Java-Programmen Icons mitgeben und Startparameter setzen.
Die Open-Source-Software JSmooth (http://jsmooth.sourceforge.net/) kapselt ein Java-Archiv mit Klassen und Ressource-Dateien in eine komprimiertes, ausführbares Exe-Programm. JSmooth setzt Eigenschaften wie ein assoziiertes Icon oder Startvariablen mit einer angenehmen grafischen Oberfläche. Ein weiteres Programm ist launch4j (http://launch4j.sourceforge.net/), welches startbare Java-Programme für Windows, Linux, Mac OS X, Solaris erzeugt. Beide sind in Ant einsatzfähig.
Eine in Java geschriebene Applikation lässt sich erst einmal nur mit einer Java Laufzeitumgebung ausführen. Einige Hersteller haben jedoch Compiler entwickelt, die direkt unter Windows oder einem anderen Betriebssystem ausführbare Programme erstellen. Die Compiler, die aus Java-Quelltext – oder Java-Bytecode – Maschinencode der jeweiligen Architektur erzeugen, nennen sich native oder Ahead-Of-Time Compiler. Das Ergebnis ist eine direkt ausführbare Datei, die keine Java Laufzeitumgebung nötig macht. Je nach Anwendungsfall kann das Programm performanter sein, eine Garantie ist es allerdings nicht. Die Startzeiten sind im Allgemeinen geringer und das Programm ist viel schwieriger zu entschlüsseln, was das Reverse Engineering angeht.
Ein freier Compiler unter der GNU-Lizenz ist gcj (http://gcc.gnu.org/java/); ein kommerzieller Vertreter ist Excelsior JET (http://www.excelsior-usa.com/jet.html). Das viele Hersteller ihre Produkte einstellt haben, ist sicherlich ein Zeichen dafür, dass die existierenden Laufzeitumgebungen mittlerweile ausreichende Geschwindigkeit, Speicherverbrauch und Startzeiten zeigen.
Einpacken von Java-Programmen
Wer Java-Programme vertreibt, weiß um das Problem der JVM-Versionen, Pfade, Start-Icon, Splash-Screen und so weiter. Eine Lösung ist, einen Wrapper zu bemühen, der sich als ausführbares Programm wie eine Schale um das Java-Programm legt. Der Wrapper ruft die virtuelle Maschine auf und übergibt ihr die Klassen. Es ist also immer noch eine Laufzeitumgebung nötig, doch lassen sich den Java-Programmen Icons mitgeben und Startparameter setzen.
Die Open-Source-Software JSmooth (http://jsmooth.sourceforge.net/) kapselt ein Java-Archiv mit Klassen und Ressource-Dateien in eine komprimiertes, ausführbares Exe-Programm. JSmooth setzt Eigenschaften wie ein assoziiertes Icon oder Startvariablen mit einer angenehmen grafischen Oberfläche. Ein weiteres Programm ist launch4j (http://launch4j.sourceforge.net/), welches startbare Java-Programme für Windows, Linux, Mac OS X, Solaris erzeugt. Beide sind in Ant einsatzfähig.

5 Comments:
Ich bin ein Aufstrebender Javaprogrammierer(Bin 13) und freue mich das ich gleich so kompetente Hilfe gefunden habe.
Ihre Tips über Nativ Compiler haben mir sehr geholfen.
Eine Frage zum Schluss: Gibt es auch Open Source Java Nativ compiler für Sony Erricson Handys?
By
Georg Engler, at Juli 06, 2007 9:55 PM
Hm. Nicht das ich wüsste. Man wird hier die JVM vom Hersteller auf dem Handy haben und ich bin mir nicht so sicher, ob es überhaupt dafür einen Markt gibt. Binärprogramme sind nicht so flexibel auf unterschiedlichen Prozessoren -- eine Abstraktion ist hier nicht schlecht. Der Vorteil wäre zumindest, dass der Programmcode schlechter auseinanderzunehmen wäre.
By
Christian Ullenboom, at Juli 06, 2007 10:27 PM
Haben sie eine Idee wie ich meine Javaprogramme trotzdem auf meinem handy benutzen kann??
Ich habe auch den von ihnen genannten wrapper ausprobiert aber ich hatte sehr viele Probleme:Das Fenster stellt sich nicht selbst ganz dar,
Icons erscheinen erst wenn ich mit der Maus darüberfahre unf eine .exe erzeugen will das programm erstrecht nicht. Was ist los? Eine neuere Version steht noch nicht zum download bereit
By
Georg Engler, at Juli 07, 2007 10:10 AM
Der 2. wrapper(launch4j) funktioniert
hingegen einwandfrei.
Ich habe ein Problem mit dem einlesen
von Dateien: mit der eingabe(Name.txt) bekomme ich eine Fehlermeldung das die Datei nicht gefunden werden kann und mit der Formulierung(Verzeichniss + Name +.txt) bekomme ich eine Fehlermeldung wegen der Syntax.
Können sie sich das mal ansehen:
import java.io.*;
import java.util.Scanner;
public class Textserch
{
public static void main(String[] args)
throws IOException
{
System.out.println("Playlist:1Wake,2Given up,3Leave out all the Rest,4Bleed it out,5Shadow of the Day,");
System.out.println(" 6What I´ve done,7Hands Held High,8No more Sorrow,9Valentine´s Day,10In between,");
System.out.println(" 11In Pieces,The little things give you away");
// Leere Zeile nur um Abstand zu halten
System.out.println(" ");
String titel;
Scanner sc=new Scanner(System.in);
System.out.println("Geben sie die Nummer des Tietels an den Sie suchen: ");
titel = sc.next();
FileReader dateiStream =
new FileReader(C:\Minutes to Midnight\ + titel +".txt" );
BufferedReader eingabe =
new BufferedReader(dateiStream);
String zeile;
while(true)
{
zeile = eingabe.readLine();
if (zeile == null)
break;
System.out.println("Der von Ihnen gesuchte Text lautet: "+ zeile);
}
eingabe.close();
}
}
Ich verwende Eclipse und lese die dateien nur nach der Nummer ein
(z.B.:(2.txt) =Text von Given up)
Was muss ich machen damit es geht??
By
Georg Engler, at Juli 07, 2007 5:10 PM
Hallo,
kleiner Fehler im Text:
"Ein weiteres Programm ist launch4j (http://launch4j.sourceforge.net/), welches startbare Java-Programme für Windows, Linux, Mac OS X, Solaris erzeugt."
Genanntes Programm erzeugt zwar unter all diesen Plattformen Windows executables aber auch eben nur diese! Keine Binaries etc. für Linux und Konsorten.
Dafür gabs aber auch was, der Name ist mir leider entfallen aber das Spiel Tribal Trouble nutzt die Technik ;-)
PS.: Bester JavaBlog & Buch!
By
Super, at Januar 09, 2008 2:30 PM
Kommentar veröffentlichen
<< Home