nus-cs2103-AY2223S1 / forum

14 stars 1 forks source link

💡LPT: What to do if the jar file you've exported won't run #169

Open zbz-lvlv opened 1 year ago

zbz-lvlv commented 1 year ago

Here are the possible reasons that I have experienced myself:

  1. JavaFX dependencies are not properly configured. You should add all these under "dependency" in your Gradle build file.

    String javaFxVersion = '18.0.2'
    
    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux'
  2. The main class of your program inherits from Application. There is a known issue with JavaFX and Gradle that if your main class extends Application, the jar file won't run properly. The solution here, is to make a main class wrapper, such that you have a Main class that calls a method in a Launcher class. Launcher extends Application, and the main method in the Main class can call a launch method in the Launcher class to execute Application.launch().

Bacon-Strips commented 1 year ago

Thanks @zbz-lvlv , managed to get my Jar file working after fixing the 2nd point.