Приложение JavaFX работает под Intellij, но не как jar - PullRequest
0 голосов
/ 21 октября 2019

Я написал программу JavaFX для школьного проекта. Ничего особенного. Но с самого начала я сделал большую ошибку. Я выбрал SDK версии 1.8 для проекта. Теперь, когда я закончил, я попытался получить флягу моего проекта с артефактами сборки. Это работает, но когда я открываю банку, ничего не происходит. Поняв, что я использовал SDK 1.8, я попытался скопировать все в новом проекте, используя JavaFX SDK 13 и JDK 13. Но я не могу запустить его таким образом. Просто получаю «обычную» ошибку JavaFX:

    /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/bin/java --module-path /Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib --add-modules=javafx.controls,javafx.fxml --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=51795:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/target/classes:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx-swt.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.base.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.controls.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.fxml.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.graphics.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.media.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.swing.jar:/Library/Java/JavaVirtualMachines/javafx-sdk-13.0.1/lib/javafx.web.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/appdirs-1.0.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/slf4j-api-1.7.25.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/jna-platform-4.5.2.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/jna-4.5.2.jar:/Users/marcelschalk/Downloads/sqlite-jdbc-3.27.2.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/javafx-maven-plugin-0.0.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-plugin-api-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-model-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-artifact-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/org.eclipse.sisu.plexus-0.3.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/cdi-api-1.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/jsr250-api-1.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-utils-3.1.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-classworlds-2.5.2.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-java-0.9.11.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/asm-7.0-beta.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/qdox-2.0-M9.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-archiver-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-io-3.0.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/commons-io-2.6.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/commons-compress-1.16.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/objenesis-2.6.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/snappy-0.4.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/xz-1.8.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/commons-exec-1.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/mojo-executor-2.3.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/slf4j-api-1.7.22.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/slf4j-simple-1.7.22.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-core-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-settings-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-settings-builder-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-interpolation-1.25.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-sec-dispatcher-1.4.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-cipher-1.4.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-builder-support-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-repository-metadata-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-model-builder-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-resolver-provider-3.6.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-resolver-impl-1.3.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-resolver-api-1.3.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-resolver-spi-1.3.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-resolver-util-1.3.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/maven-shared-utils-3.2.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/org.eclipse.sisu.inject-0.3.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/guice-4.2.1-no_aop.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/aopalliance-1.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/guava-25.1-android.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/jsr305-3.0.2.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/checker-compat-qual-2.0.0.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/error_prone_annotations-2.1.3.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/j2objc-annotations-1.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/animal-sniffer-annotations-1.14.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/javax.inject-1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/plexus-component-annotations-1.7.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/commons-lang3-3.8.1.jar:/Users/marcelschalk/OneDrive - stud.hs-merseburg.de/Proggen/Manager/lib/jfoenix-8.0.8.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-controls/13/javafx-controls-13.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-controls/13/javafx-controls-13-mac.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-graphics/13/javafx-graphics-13.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-graphics/13/javafx-graphics-13-mac.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-base/13/javafx-base-13.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-base/13/javafx-base-13-mac.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-fxml/13/javafx-fxml-13.jar:/Users/marcelschalk/.m2/repository/org/openjfx/javafx-fxml/13/javafx-fxml-13-mac.jar:/Users/marcelschalk/.m2/repository/net/harawata/appdirs/1.0.3/appdirs-1.0.3.jar:/Users/marcelschalk/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/Users/marcelschalk/.m2/repository/net/java/dev/jna/jna-platform/4.5.2/jna-platform-4.5.2.jar:/Users/marcelschalk/.m2/repository/net/java/dev/jna/jna/4.5.2/jna-4.5.2.jar:/Users/marcelschalk/.m2/repository/org/slf4j/slf4j-simple/1.7.28/slf4j-simple-1.7.28.jar" sample.Main
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/marcelschalk/OneDrive%20-%20stud.hs-merseburg.de/Proggen/Manager/lib/slf4j-simple-1.7.22.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/marcelschalk/.m2/repository/org/slf4j/slf4j-simple/1.7.28/slf4j-simple-1.7.28.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
    at sample.Main.start(Main.java:53)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
Exception running application sample.Main

Process finished with exit code 1

Я действительно не знаю, что делать сейчас ...

Это файлы, которые работают в Intellij под JDK 1.8:https://drive.google.com/file/d/1DTtntPrh-9pkgrwyrHi9im3B2IAYeZoa/view?usp=sharing

И вот этот проект перестройки, который не работает: https://drive.google.com/file/d/1gPRzxV32OAUZct4w1lF-Y3WTv7lR-BCF/view?usp=sharing

Структура проекта:

enter image description here

1 Ответ

2 голосов
/ 22 октября 2019

Я рекомендую использовать инструменты автоматизации сборки Java для создания проекта с ресурсами и внешними библиотеками, такими как: maven, gradle или ant. Я предпочитаю maven.

Вы можете использовать мой шаблон проекта Maven из github .

Все настройки сборки находятся в pom.xml в корне. проекта. Основной интерес для вас представляет плагин maven-shade-plugin , который занимается упаковкой в ​​jar со всеми вашими внешними зависимостями и ресурсами. Вы должны указать свой основной класс там. Также при использовании maven вам не нужно вручную загружать и привязывать библиотеки к проекту. Вам нужно только указать lib в разделе зависимостей. Для этого просто введите в Google что-то вроде "имя_библиотеки maven" , перейдите в репозиторий maven, выберите версию и скопируйте предложенные строки в раздел зависимостей.

Я также рекомендую переместить все изображения и fxmlформы к ресурсам проекта. И получите это так:

getClass().getResource("/frames/MainFrame.fxml")

После того, как вы скопируете весь код в проект maven и сконфигурируете его, вам потребуется:

  1. Открыть раскрывающееся меню конфигурации рядом с запускоми кнопки отладки.
  2. Редактирование конфигурации ...
  3. Нажмите кнопку «плюс» в левом верхнем углу.
  4. Выберите Maven.
  5. В типе командной строки чистая установка
  6. Вы можете переименовать эту конфигурацию, изменив Имя.
  7. Затем сохраните эту конфигурацию и запустите ее, после успешного завершения запуска ваш файл .jar будет расположен на целевой каталог .
...