# runnable jar nicht ausführbar



## ChrisianM (12. Jan 2019)

Hallo zusammen,

bitte nicht mit den Augen rollen, ich habe auch im Internet über Stunden hinweg gesucht und nichts gefunden, was mir weiterhilft:

Ich habe in JavaFX ein Programm erstellt, das ich für dieses Beispiel extrem gekürzt habe. Aber auch dieses Beispiel lässt sich nach Export als runnable jar nur über die cmd mit java -jar TestRunnableJAR.jar ausführen, aber nicht mit einem Doppelklick vom Desktop.

Beim Export verwende ich "Extract required libraries into generated JAR", aber auch mit allen anderen Punkten funktioniert es nur in der CMD

Kann es sein, dass meine Eclipse-Version (Oxygen.3a Release (4.7.3a)) das nicht kann?
Ich nutze Windows 10.

Vielen Dank für jede Hilfe.

Hier ist das Mini-Programm:

```
package test;


import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class TestRunnableJAR extends Application {

 public static void main(final String[] args) {
  launch(args);
 }

 public void start(final Stage stage) throws Exception {
  FlowPane flowPane = new FlowPane();

  Scene scene = new Scene(flowPane, 500, 300); 
  
  stage.setScene(scene);
  stage.setTitle("Test, ob runnable jar funktioniert");
  stage.setResizable(true);
  stage.centerOnScreen();
  
  MenuBar menuBar = new MenuBar();
  
  // --- Menuepunkte
  ToggleGroup toggleGroup = new ToggleGroup();
  
        Menu menuSide = new Menu("Farbe");
        RadioMenuItem gruenMenuItem = new RadioMenuItem("Gruen");
        gruenMenuItem.setSelected(true);
        
        RadioMenuItem blauMenuItem = new RadioMenuItem("Blau");
        blauMenuItem.setSelected(false);
        
        gruenMenuItem.setOnAction(new EventHandler<ActionEvent>() {
         public void handle(ActionEvent action) {
//          System.out.println("Gruen gewaehlt");
         }
        });

        blauMenuItem.setOnAction(new EventHandler<ActionEvent>() {
         public void handle(ActionEvent action) {
//          System.out.println("Blau gewaehlt");
         }
        });
        
        gruenMenuItem.setToggleGroup(toggleGroup);
        blauMenuItem.setToggleGroup(toggleGroup);
        
        menuSide.getItems().addAll(gruenMenuItem, blauMenuItem);
 
        menuBar.getMenus().addAll(menuSide);
        
  flowPane.getChildren().addAll(menuBar);
  stage.show();
 }
}
```


----------



## httpdigest (12. Jan 2019)

Schau dir mal an, welches Programm bzw. welche genaue Version von eventuell mehreren installierten Java-Runtimes dem .jar/jarfile assoziiert ist. Es gibt zwar eine Windows GUI innerhalb der Systemsteuerung, die dir sagt, dass (hoffentlich) Java der Extension .jar assoziiert ist, aber man sieht nicht genau den Pfad zu der Executable. Um das zu sehen, gehe mal in die Kommandozeile (cmd) und führe `regedit` aus.
Das öffnet den Windows Registry Editor. Hier navigiere in dem Baum links zum Eintrag `HKEY_CLASSES_ROOT\.jar`. Dieser sollte rechts/mittig einen REG_SZ Eintrag mit dem Wert `jarfile` enthalten. Das bedeutet, dass die eigentliche Anwendung in dem Knoten `HKEY_CLASSES_ROOT\jarfile` gespeichert ist. Und das konkrete Kommando zum Ausführen der Anwendung beim Öffnen/Doppelklick auf eine .jar-Datei steht im Knoten `HKEY_CLASSES_ROOT\jarfile\shell\open\command`. Schaue dir da den REG_SZ Eintrag (falls einer vorhanden) auf der mittlere/rechten Seite an. Dort sollte z.B. sowas stehen wie `"C:\Program Files\Java\jdk-11.0.1\bin\javaw.exe" -jar "%1" %*`.

Falls dort wirklich ein JDK 11 oder JRE 11 drinsteht, ist das der Grund, warum es nicht funktioniert: Oracle hat JavaFX aus dem JDK/JRE 11 entfernt. Eclipse lässt du wahrscheinlich unter einem JDK/JRE 10 laufen bzw. der Classpath deiner Anwendung verwendet ein JDK 10, in welchem JavaFX noch enthalten ist. Genauso scheinst du im %PATH% auch ein JDK/JRE 10 zu haben, was erklären würde, warum es auf der Kommandozeile beim Ausführen von `java -jar ...` funktioniert, da im 10er JRE JavaFX noch enthalten ist. Auch, wenn du nun "Extract required libraries into jar" beim Exportieren des Runnable Jars aus Eclipse heraus angehakt hast, sorgt das nicht dafür, dass System Libraries in das Jar extrahiert werden (wie etwa das JDK bzw. JavaFX). Du müsstest also entweder JavaFX 11 herunterladen und in dein Projekt einbinden, oder aber du änderst die Dateiassoziation für .jar-Dateien zum JDK/JRE 10, indem du im Registry Editor den REG_SZ Eintrag entsprechend änderst (erfordert Administrator-Rechte).


----------



## ChrisianM (13. Jan 2019)

Hallo httpdigest,

vielen Dank, ich habe gerade wieder stundenlang probiert. Was ich sagen kann:
Im REG_SZ Eintrag auf der rechten Seite steht `"C:\Program Files\Java\jdk-11.0.1\bin\javaw.exe" -jar "%1" %*`.

Ich habe nun also m. E. JavaFX 11 heruntergeladen und Eclipse auf die Version 2018-09 (4.9) aktualisiert.

JavaFX 11 ist nach meinen Recherchen die javafx-sdk-11.0.1. Ich habe die JRE von dem Update 191 auf das Update 192 geändert und beide in den Build Path eingefügt (sh. unten den Screenshot Eclipse.JPG).

Die Umgebungsvariable Path hat diese Einträge:
C:\Program Files\Java\javafx-sdk-11.0.1\bin
C:\Program Files\Java\jdk-11.0.1\bin

Allerdings nach wie vor dasselbe Verhalten wie oben beschrieben (aus cmd heraus geht es, per Doppelklick nicht).
Hast du noch eine Idee?

Vielen Dank!


----------



## ChrisianM (19. Jan 2019)

Hallo zusammen,

mein Problem besteht nicht mehr. Wen es interessiert, hier meine Entwicklungen, die vermutlich dazu geführt haben:
- Umgebungs-Variable CLASSPATH vollständig gelöscht (sollte aber nach meinem Wissen damit nichts zu tun haben).
- javafx-sdk-11.0.1 wieder entfernt
- Das Update 202 von Java 8 geholt
- In Umgebungs-Variable PATH nur noch diesen Eintrag vorgenommen: C:\Program Files\Java\jdk1.8.0_202\bin
- In der Registry in `HKEY_CLASSES_ROOT\jarfile\shell\open\command` den Eintrag REG_SZ mit `"C:\Program Files\Java\jdk1.8.0_202\bin\javaw.exe" -jar "%1" %*`.

Recherche- und Testaufwand dafür > 50 Stunden, aber immerhin ein bisschen was gelernt.


----------



## Xyz1 (19. Jan 2019)

In der Registry hat man an für sich nichts zu suchen vielmehr:



AnfängerHoch10 hat gesagt.:


> - javafx-sdk-11.0.1 wieder entfernt
> - Das Update 202 von Java 8 geholt


stelle ich mir das gerade problematisch vor.


----------

