Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Java-Exe





Frage

Hallo, ich habe mit JBuilder ein Java-Programm geschrieben. Nun möchte ich aus meiner Klasse eine EXE machen um Sie weiterzugeben. Wie mache ich dies? Hat jemand eine Idee. Gruss Eddi

Antwort 1 von semi

Es gibt auch sogenannte "native Compiler", die Java Programme in "gewöhnliche" EXE-Files übersetzen.
Ich habe mal Excelsior JET getestet (http://www.excelsior-usa.com). Nun das Ergebnis war ca. 300KB groß, dazu kamen dann noch drei DLL's mit ÜBER 8 MB. Das war im Prinzip nichts anderes als die komplette VM in DLL's gepackt. Geschwindigkeitsvorteile bringt es bei einem interaktiven Programm kaum.
Vielleicht gibt es welche, die eine bessere Übersetzung liefern. Ich kenne leider keine. (Tower-J, GCJ ???)
Ich würde Dir empfehlen, das ganze in ein JAR-Archiv zu verpacken und dieses über die Manifest Datei ausführbar zu machen.

Sollte jemand doch einen "brauchbaren" Nativcompiler für Java kennen, dann bitte melden.

Gruss,
Michael

Antwort 2 von semi

Hier noch zwei Links, solltest Du es doch mit dem GNU-Compiler versuchen wollen.
GCJ Seite
oder
GNU mirror sites

Antwort 3 von Eddi

Hallo semi,

danke erstmal für die Infos.
Habe aber noch ein paar Fragen.
Wenn ich ein JAR-Archiv mit JBuilder erstelle sind zwar meine Icons im Archiv enthalten, werden aber wenn ich das Programm mit java -jar test.jar aufrufe nicht angezeigt. Was mache ich falsch?
Als weiteres, was ist eine Manifest Datei und wie erstelle ich diese? Wird dann die JVM noch benötigt um das Programm auf anderen Rechnern zu starten?

Gruss Eddi

Antwort 4 von semi

Das mit den Icons ist mir etwas unklar.
Meinst Du .ICO Dateien oder irgendetwas, was Du im Programm anzeigst?
Manifest-Datei ist einer Art Beschreibung des gepackten Archivs.
Wenn Du das Archiv entpackst, dann steht das Ding im Unterverzeichnis META-INF.
Man kann dort u.a. die Hauptklasse (also die mit main) angeben.
So könnte es z.B. aussehen (Dateiname: Manifest.mf):

Manifest-Version: 1.0
Main-Class: test.myapp.MyApp
Created-By: John Doe
Das entspricht einer Klasse:

package test.myapp;
public class MyApp {
  public static void main(String argv[]) {
...
...usw.

In JBuilder kannst Du beim Erstellen des Archivs eine Manifestdatei angeben.
Die automatisch erzeugte Manifest-Datei enthält, glaube ich, den Eintrag Main-Class: ... nicht. Also lieber selbst angeben.
Die virtuelle Machine (JRE) muss vorhanden sein.

Gruss,
Michael

Antwort 5 von Eddi

Hallo Michael,

hab jetzt erst mal alles getestet, und es hat auch alles geklappt. Das mit den Icons (gifs für die Buttons) hab ich rausbekommen, ich musste sie nicht mit ins JAR-Archiv packen, sondern sie bloss ins selbe Verzeichnis kopieren damit sie im Programm angezeigt werden.
Es ist nur noch eine Sache, wenn ich mein Java-Programm mit einer BATCH starte bleibt das DOS-Fenster geöffnet, ist es möglich dieses zu schliessen wenn die Application gestartet ist?

Gruss Eddi

Antwort 6 von semi

Ich nehme an, dass es Dir um die Ausführung unter Windows geht.

  1. In Batchdatei (siehe start /? )
    @echo off
    start javaw -jar myApp.jar
  2. Windows Scripting Host (*.vbs Datei)
    
    set shell = wscript.CreateObject("WScript.Shell")
    shell.Run "javaw -jar myApp.jar"
    
  3. Einfachen Link erstellen (*.lnk)
    Ziel: javaw.exe -jar myApp.jar
    Arbeitsverzeichnis: wo auch immer es steht.

Beachte, dass überall javaw und nicht java steht. java.exe ist die Console-Version (DOS-Fenster), javaw.exe ist eine Windoof-Version und läuft ohne DOS-Fenster.
Ich würde die dritte Variante mit dem Link bevorzugen.

Übrigens. Deine Icons können ruhig in dem Archiv stehen. Das ist eigentlich der Sinn und Zweck JAR's einzusetzen.
Alles was zusammengehört, sollte auch zusammen bleiben.
Es liegt wahrscheinlich daran, dass die Grafikdateien falsch gepackt sind. In irgendeinem Unterverzeichnis.

Gruss,
Michael

Antwort 7 von semi

Ich nehme an, dass es Dir um die Ausführung unter Windows geht.

  1. In Batchdatei (siehe start /? )
    @echo off
    start javaw -jar myApp.jar
  2. Windows Scripting Host (*.vbs Datei)
    
    set shell = wscript.CreateObject("WScript.Shell")
    shell.Run "javaw -jar myApp.jar"
    
  3. Einfachen Link erstellen (*.lnk)
    Ziel: javaw.exe -jar myApp.jar
    Arbeitsverzeichnis: wo auch immer es steht.

Beachte, dass überall javaw und nicht java steht. java.exe ist die Console-Version (DOS-Fenster), javaw.exe ist eine Windoof-Version und läuft ohne DOS-Fenster.
Ich würde die dritte Variante mit dem Link bevorzugen.

Übrigens. Deine Icons können ruhig in dem Archiv stehen. Das ist eigentlich der Sinn und Zweck JAR's einzusetzen.
Alles was zusammengehört, sollte auch zusammen bleiben.
Es liegt wahrscheinlich daran, dass die Grafikdateien falsch gepackt sind. In irgendeinem Unterverzeichnis.

Gruss,
Michael

Antwort 8 von Eddi

Hallo Michael,

hab dies getestet und es Funktioniert alles.

Vielen Dank für deine Infos.

Gruss Eddi

Antwort 9 von RMC

hi!

ich wollte amal genau dasselbe machen (ebenfalls exe aus java-files erstellen, ebenfalls mit dem jbuilder)

nur wie mach ich aus den .java oder .class files ein .jar archiv???

und das mit der manifest-datei was ihr da oben gschriebn habts hab ich auch nicht ganz kapiert.. :-/

plz schauts mal obs ihr mir das erklärn könnts

thx, RMC

Antwort 10 von semi

1) Zu JAR (mit JBuilder):
Datei->Neu->Archive Builder
Wähle als Archivtyp: Application bzw. Anwendung
Rest sollte klar sein.
Die Manifestdatei wird automatisch erzeugt, wenn Du bereits die Klasse mit der Funktion main eingestellt hast.

Gruss,
Michael

Antwort 11 von RMC

jo danke semi, oke soweit alles klar, hab das archiv und die manifest datei..muss ich in der jetzt was eintragen? und wie krieg ich jetzt entgültig eine *.exe? hab das auch mit dem link probiert mit javaw -jar <name>.jar hat aber net ganz hinghaut..

greetz RMC

Antwort 12 von semi

1) Kopiere die Jar-Datei in irgendein leeres Verzeichnis
2) Öffne das Dosfenster (nicht zu weit :-))
3) Gebe folgendes ein:
jar -xf archivname.jar
4) Schau Dir die Datei MANIFEST.MF im Unterverzeichnis META-INF an
Sie sollte eine Zeile haben, die wie folgt anfängt:

Main-Class: packagename.klasse-mit-main

Wenn dies nicht dabei ist, dann hinzufügen, und erneut packen.



Antwort 13 von RMC

k soweit passt alles, nur wenn ich das im dos-fenster eingeb krieg ich a fehlermeldung mit dem inhalt "could not initialize the java virtual machine"

..hm und wenn ich javaw -jar <name>.jar macht bei mir gar nix...damn

noch irgendwelche ideen plz? :)

greetz RMC

Antwort 14 von semi

Damit kann ich nichts anfangen.
Es kann hundert Gründe haben, warum es nicht geht. Wahrscheinlich hast Du irgendeinen Mix aus mehreren unterschiedlichen Versionen von JRE auf Deinem Rechner oder Du hast etwas gelöscht, was zu JRE gehört.
Deinstallieren und neuinstallieren.

Zusammenfassend setzt sich die Antwort auf Deine Frage zu der Manifest.mf Datei und JAR-Archiven aus Antwort 4 und Antwort 10.

Gruss,
Michael

Antwort 15 von Progga

Java ist eine der besten (höheren) programmiersprachen die ich kenne und für manche sachen um längen besser als c++ (z.B. bei Windowsfenstern).
Leider gibt es für java keine brauchbaren editoren, wie visual c++ und das ist der einzige, und wie ich finde auch recht gute, grund, warum ich in c++ programmiere. Ich finde java durchaus besser, aber es gibt einfach keine guten builder.

Wenn mir jemand gute java-builder nennen kann, kann er mich gerne e-mailen

thx

Antwort 16 von semi

@Progga
Hier einige IDE's und Entwicklungsverkzeuge, die durchaus mit Visual Studio konkurieren können.

- Together Control Center: Auch für C++, VB, C#, DTD/XML, RDBMS usw. Unterstützt die komplette UML-Entwicklungskette. Momentan das beste, was ich kenne.

- Simplicity for Java: Gerade für Anfänger wunderbar. Jede Menge Wizards zur "automagischen" Codeerzeugung.

- IBM VisualAge: Habe selten Software von IBM gesehen, die schlecht war :-)

- IBM Eclipse: Das Ende von Swing kündigt sich an :-)

- Oracle JDeveloper: no comment

- Borland JBuilder: kennt jeder
uvm.

Gruß,
Michael