# Ausführbare Jar-File funktioniert nicht



## lifeisbeautiful (6. Dez 2017)

Hallo zusammen,

ich habe ein Programm mit Eclipse programmiert. Es gibt verschiedene Klassen etc. Dabei wird eine Datenbankverbindung aufgebaut, also ist im Projekt auch ein JDBC-Treiber eingebunden. Darüber hinaus ist noch eine Config.txt File enthalten, das die beinhalteten werte automatisch in die GUI einträgt.

Jetzt habe ich versucht eine Jar-File zu erstellen, um das ganze Programm über diese Jar-File starten zu können, ohne Eclipse. Nachdem ich die Jar-File starte, öffnet sich due GUI, aber es sind die Parameter, die in der Config.txt enthalten sind, nicht automatisch eingetragen. Auch wenn ich das von Hand mache und das Programm dann starten möchte, passiert ebenfalls nichts.

Kann mir denn einer helfen? Ich freue mich über jede Hilfe..


----------



## truesoul (6. Dez 2017)

Wo liegt denn die Config.txt?


----------



## Robat (6. Dez 2017)

Fliegt eine Exception wenn du das Programm über die Konsole startest?


----------



## lifeisbeautiful (6. Dez 2017)

Robat hat gesagt.:


> Fliegt eine Exception wenn du das Programm über die Konsole startest?



Danke für die Antwort.
Also wenn ich das Programm ganz normal über Eclipse laufen lasse, dann habe ich keine Fehler etc. Programm läuft fehlerfrei.


----------



## mrBrown (6. Dez 2017)

lifeisbeautiful hat gesagt.:


> Also wenn ich das Programm ganz normal über Eclipse laufen lasse, dann habe ich keine Fehler etc. Programm läuft fehlerfrei.


Nicht über Eclipse ist interessant, sondern einfach über die Konsole/Terminal/Eingabeaufforderung/wie auch immer du das nennen magst


----------



## lifeisbeautiful (6. Dez 2017)

truesoul hat gesagt.:


> Wo liegt denn die Config.txt?


Die Config.txt Datei liegt im Projektordner. Also im eclipse Ordner und eben im Projektordner.


----------



## lifeisbeautiful (6. Dez 2017)

mrBrown hat gesagt.:


> Nicht über Eclipse ist interessant, sondern einfach über die Konsole/Terminal/Eingabeaufforderung/wie auch immer du das nennen magst


Hoffe habe dich richtig verstanden. Also wenn ich die Jar File über die Konsole starte, dann startet es ohne Fehler aber es ist das selbe, wie wenn ich es normal starte.

Falls du aber das eigentliche Projekt meinst, weiß ich ehrlich gesagt nicht, wie ich das über die Konsole starte -.-


----------



## thet1983 (6. Dez 2017)

hast du über eclipse eine runnable jar erstellt? 
wenn ja dann kannst du die Jar über die cmd starten.

```
java -jar MeinJarName.jar
```
dann siehst du auch ob eine Exception fliegt...


----------



## lifeisbeautiful (6. Dez 2017)

thet1983 hat gesagt.:


> hast du über eclipse eine runnable jar erstellt?
> wenn ja dann kannst du die Jar über die cmd starten.
> 
> ```
> ...


Herzlichen Dank. Folgende Fehlermeldung:

java.io.FileNotFoundException: Config.txt (Das System kann die angegebene Datei
nicht finden)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at Main.loadConfiguration(Main.java:55)
        at Main.main(Main.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)

Es leigt wirklich an der config file. Wie kann ich das Problem lösen? Ich meine die config.txt file befindet sich auch im Projekordner. Wieso nimmt er das nicht mit rein?


----------



## Robat (6. Dez 2017)

Kann man ohne Code nicht sagen. 
Wie greifst du auf die Datei denn zu?


----------



## lifeisbeautiful (6. Dez 2017)

Robat hat gesagt.:


> Kann man ohne Code nicht sagen.
> Wie greifst du auf die Datei denn zu?


Hier ein Beispiel für den Hostnamen

input = new FileInputStream("Config.txt");
hostName = properties.getProperty("hostName");
hostNameField.setText(Main.hostName);

Reicht dir dieser Codeabschnitt?


----------



## thet1983 (6. Dez 2017)

sollte dir helfen...
https://www.mkyong.com/java/java-read-a-file-from-resources-folder/


----------



## lifeisbeautiful (6. Dez 2017)

thet1983 hat gesagt.:


> sollte dir helfen...
> https://www.mkyong.com/java/java-read-a-file-from-resources-folder/


Vielen Dank für deine Hilfe. Eins habe ich nicht ganz verstanden. Die Config Datei funktioniert eigentlich schon, wenn ich direkt mit Eclipse arbeite. Nur mit der Jar-File nicht. Was genau muss ich denn dann ändern? Den Ordner oder wie?


----------



## thet1983 (7. Dez 2017)

du musst nichts ändern...eine jar ist ein archive...in diesem archive kann man nicht einfach wie im filesystem auf die datei zu greifen..

JAR


----------



## lifeisbeautiful (7. Dez 2017)

thet1983 hat gesagt.:


> du musst nichts ändern...eine jar ist ein archive...in diesem archive kann man nicht einfach wie im filesystem auf die datei zu greifen..
> 
> JAR


Verstehe. Das heißt ich muss den Code anpassen bzw. ergänzen. Ist es denn nicht irgendwie anderweitig lösbar? Existiert denn nicht ein anderer Weg, wie z. B. eine .exe Datei zu erstellen?


----------



## krgewb (7. Dez 2017)

Es absolut möglich, auf Dateien zuzugreifen. Ich habe mir damals diese Notizen gemacht:

Damit die jar-Datei funktioniert, muss der trenner wie folgt deklariert sein:

```
String trenner = "/";
```

Und nicht wie folgt:

```
String trenner = System.getProperty("file.separator");
```

Außerdem dürfen keine Warnings im Code sein.
Und die Dateien dürfen nicht in Überordnern sein.

An einer Stelle in meinem Programm sollte eine htm-Seite geöffnet werden. Dazu musste ich schreiben:

```
seite.setPage(getClass().getResource("spielbeschreibung" + trenner + "Spielbeschreibung.htm"));
```

Der Ordner ist in dem Package in dem die Klasse liegt. Die Dateien dürfen nicht in
einem Ordner sein, der in der Ordnerhierarchie höher liegt.

Bei Bildern ebenfalls.

```
ImageIcon gameover = new ImageIcon(getClass().getResource("spielfiguren" + trenner + "dracula" + trenner+ "gameover.gif"));
```


----------

