# Ausführbare Java Anwendung



## redbomber (11. Aug 2009)

Hi zusammen, habe mal wieder eine Frage:
Ich versuche gerade aus dem Programm das ich programmiert habe eine ausführbare Datei zu erstellen.

Ich verwende Eclipse und dachte, über Export -> *.jar kann ich so etwas erreichen, was aber nicht funktioniert.
Daher meine Frage, wie kann ich aus meinem Quellcode eine ausführbare Datei erstellen?

Vielen Dank!


----------



## Atze (11. Aug 2009)

was funktioniert denn nicht?


----------



## redbomber (11. Aug 2009)

naja, es geht garnichts. Also es passiert nichts.


----------



## bygones (11. Aug 2009)

redbomber hat gesagt.:


> naja, es geht garnichts. Also es passiert nichts.



mehr infos...

wie startest du sie ? kommt eine fehlermeldung ? hast du ein manifest mit main-class etc ?


----------



## redbomber (11. Aug 2009)

Ich kann mal beschreiben wie ich es bisher gemacht habe:

Eclipse:

-> Export
-> Java -> JAR File
-> "Export generated class files and resources" und "Export java source files and resources"
(hier habe ich das komplette Projekt inklusive aller packages ausgewählt)
-> "Compress contents of JAR file"
-> "Eport class files with compile errors/warnings"
-> "Generate Manifest-File"
-> "Seal the JAR"
-> Und dann wähle ich noch die Klasse mit der main-Methode aus...


Geht aber trotzdem nicht


----------



## redbomber (11. Aug 2009)

was ist dieses manifest-file genau? was muss ich da auswählen?


----------



## bygones (11. Aug 2009)

wenns keine weiteren libraries gibt die du fuer dein projekt brauchst sollte der eclipse export so funktionieren...

wie startest du das jar ? von console aus ueber java - jar meinJar.jar ?


----------



## redbomber (11. Aug 2009)

also das Programm soll unter Windows per doppelklick gestartet werden.

Habe jetzt allerdings gelesen, dass das jar-File ein Verzeichnis META-INF beinhalten muss und darin eine Datei namens MANIFEST.MF vorhanden sein muss. Denke das ist bei mir beides nicht der Fall.


----------



## bygones (11. Aug 2009)

redbomber hat gesagt.:


> also das Programm soll unter Windows per doppelklick gestartet werden.
> 
> Habe jetzt allerdings gelesen, dass das jar-File ein Verzeichnis META-INF beinhalten muss und darin eine Datei namens MANIFEST.MF vorhanden sein muss. Denke das ist bei mir beides nicht der Fall.


wenn du die eclipse export funktion nutzt ist das schon vorhanden.

doppelklick ist immer problematisch - z.b. kann ein user die endung .jar mit Winzip zb verbunden haben, dann geht das logischerweise gar net.

oeffne mal eine Konsole, geh in das Verzeichnis in dem das Jar liegt und ruf es dort direkt auf


----------



## redbomber (11. Aug 2009)

ja das hatte ich schon geprüft und das sollte eigentlich mit dem richtigen Programm geöffnet werden.

Habe es jetzt über die Konsole probiert und endlich mal auch eine Fehlermeldung bekommen:

Exception in thread "main" java.lang.NoClassDefFoundError: 
Caused by: java.lang.ClassNotFoundException ...


----------



## bygones (11. Aug 2009)

ok dann wirds jetzt zeit mal ins jar zu schauen (mit winzip zb) ... ist alles so drin wie du erwartet hast ? 
ist das manifest da mit den richtigen eintraegen ?


----------



## redbomber (11. Aug 2009)

ja scheint alles zu stimmen.
auch der eintrag in dem manifest-file verweist auf die korrekte Klasse.

-> Main-Class: mainpackage.MainClass

mehr steht da allerdings auch nicht drin


----------



## bygones (11. Aug 2009)

und es gibt auch eine MainClass im Ordner mainpackage in dem jar ?


----------



## Spacerat (11. Aug 2009)

Den Wichtigsten Teil der Fehlermeldung hast du aber abgeschnitten...
Welche Klasse wird denn da nicht gefunden? Die Maimmethode wird ja offensichtlich gefunden und ausgeführt.


----------



## redbomber (11. Aug 2009)

ja in dem package befindet sich diese Klasse.

also folgende Meldung kommt, wenn ich über die Konsole das *.jar-File aufrufen möchte:

Exception in thread "main" java.lang.NoClassDefFoundError: Visualization
at java.net.URLClassLoader$1.run(unknown source)
at java.secuity.AccessController.doPrivileged(native method)
at java.net.URLClassLoader.findClass(unknown source)
at java.lang.ClassLoader.loadClass(unknown source)
at sun.misc.Launcher$AppClassLoader.loadClass(unknown source)
at java.lang.ClassLoader.loadClass(unknown source)
at java.lang.ClassLoader.loadClassInternal(unknown source)
Could not find the main class: Visualization. Programm will exit


----------



## Spacerat (11. Aug 2009)

Aha... das hilft schon sehr weiter. Er kann die Klasse Visualization nicht finden. Wen sie nicht zu dem Projekt gehört, stammt sie mit Sicherheit aus einem Archiv, welches im Klassenpfad nicht gefunden wurde. Es ist zu beachten, das das JDK eine eigene JVM verwendet. Das bedeutet, das wenn ein Archiv in der JRE des JDKs vorhanden ist, muß sie noch lange nicht in der JRE des Systems vorhanden sein. Eine 2. Möglichkeit wäre, das sie Zum Projekt gehört, jedoch Compile-Warnungen aufweisst. In diesem Fall muß der Haken bei "Export Classes with Compile-Warnings" entfernt werden.


----------



## MrG (11. Aug 2009)

redbomber hat gesagt.:


> also das Programm soll unter Windows per doppelklick gestartet werden.



Da kann dir "izpack" sehr gut helfen, damit kannst du aus deinem lauffähigen jar ein exe machen.
(IzPack - Package once. Deploy everywhere. | IzPack)

Beste Grüße


----------



## redbomber (12. Aug 2009)

hmm,
also konnte den Fehler nicht finden. Werde jetzt erst mal ein kleines Programm testen.
Sobald ichs weiss woran es lag werde ich es posten.

Vielen Dank euch allen schonmal !!!


----------



## redbomber (25. Sep 2009)

Also jetzt geht es, obwohl ich nichts (zumindest nicht wissentlich) verändert habe.

Kann das Programm also mit:


```
java -jar Visualizer.jar
```

aufrufen, oder einfach auf das *.jar File doppelklicken.



Nun noch 1 weitere Frage:

Wenn ich das Programm über Eclipse Starte, weise ich der JVM mehr speicher zu.

Wenn ich das *.jar File aber über Dopplklick starte, dann startet der mit z.B. 60 MB Hauptspeicher.
Das reicht aber nicht.

Wie kann ich also festlegen wieviel MB Hauptspeicher der JVM zugewiesen werden soll?
Aber nicht über die Konsole, weil darüber soll der Benutzer das File nicht aufrufen, der Benutzer soll nur das *.jar File doppelklicken.


----------



## Dragonfire (25. Sep 2009)

Bei eclipse gibt es zwei Exports von Jar-Files ...
Hast du "runnable Jar-File genommen" oder nur "Jar-File" ?


----------



## redbomber (1. Okt 2009)

Also bei mir gibt es in Eclipse nur:

Jar-File

Was bewirkt das runnable Jar-File? Ausführen kann ich das Programm ja schon per Doppel-Klick. Nur kann ich den zugewiesenen Hauptspeicher nicht festlegen.


----------



## Dragonfire (1. Okt 2009)

Wollte dir nur mal den Hinweis geben ...
Externe Bibliotheken werden dann z.B. mit eingebunden ...
den genauen Unterschied müsste aber mal ein Experte erläutern


----------



## maki (1. Okt 2009)

> Ausführen kann ich das Programm ja schon per Doppel-Klick. Nur kann ich den zugewiesenen Hauptspeicher nicht festlegen.


Dazu musst du ein Shell Script (.cmd für Windows, .sh für Linux) für jede Plattform mitliefern, dort kannst du den Speicher dann einstellen.


----------



## Atze (1. Okt 2009)

mit ner .bat unter win ginge das auch, denk ich


----------



## maki (1. Okt 2009)

Atze hat gesagt.:


> mit ner .bat unter win ginge das auch, denk ich


Klar, aber .bat ist so command.com und  das ist so MS-DOS und das ist so 1980er..


----------



## redbomber (9. Okt 2009)

Dragonfire hat gesagt.:


> Wollte dir nur mal den Hinweis geben ...
> Externe Bibliotheken werden dann z.B. mit eingebunden ...
> den genauen Unterschied müsste aber mal ein Experte erläutern



ja vielen Dank! Genau da hatte ich auch ein Problem, hatte andere Bibliotheken verwendet, die ich glücklicherweise dann umgehen konnte und somit rausgenommen habe...das hätte ich mir dann ersparen können.

Mich wundert es nur dass ich bei mir in Eclipse SDK nur die eine Möglichkeit habe, nämlich "JAR File" und sonst nichts.


----------



## Gast2 (9. Okt 2009)

für sowas kannst du dir auch einfach ein kleines ant script schreiben.
und wenn du deine anwendung über webstart startest kannst du auch parameter mitgeben und den speicher erhöhen soviel ich weiß. dann brauchst auch keine unterschiedliche dateien für verschiedene BS...


----------



## redbomber (9. Okt 2009)

maki hat gesagt.:


> Dazu musst du ein Shell Script (.cmd für Windows, .sh für Linux) für jede Plattform mitliefern, dort kannst du den Speicher dann einstellen.



Vielen Dank euch allen.
Hat funktioniert!


----------

