JavaFx InvocationTargetException для файлов в преобразованном проекте Maven - PullRequest
0 голосов
/ 25 января 2019

Недавно я попытался добавить изображение в метку в своем проекте JavaFx Maven в Eclipse.Если я запускаю приложение в Eclipse, все работает нормально, и никаких ошибок не возникает.

Этот пост отличается от: «Почему относительный путь не работает в JAVA в JAR-файле?»сообщение!Я пробовал решение этого поста, но оно не работает для меня.Я описал это ниже.

Если я запускаю приложение из терминала Linux, например java -jar myapplication.jar, возникает следующая ошибка:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$412(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.FileNotFoundException: src/pictures/forms_logo_2_1.png (Datei oder Verzeichnis nicht gefunden)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at de.elastic.client.Main.pane1(Main.java:193)
    at de.elastic.client.Main.start(Main.java:259)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$419(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$399(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$397(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$398(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$203(GtkApplication.java:139)
    ... 1 more
Exception running application de.elastic.client.Main

Я локализовал ошибку при импорте файла изображения,Для импорта я использовал этот код:

FileInputStream input = new FileInputStream("path/picture.png");
Image image = new Image(input);
Label img1 = new Label();
img1.setGraphic(new ImageView(image));

Я также попытался передать imageUrl непосредственно в класс Image, например Image image = new Image(imageUrl);.Это работало в предыдущих проектах для меня.

Я также пытался Image image = new Image(getClass().getResourceAsStream(imageUrl));, но здесь eclipse выдает ошибку Cannot make a static reference to the non-static method getClass() from the type Object.

По этому поводу я тоже пытался Image image = new Image(Main.class.getResource(imageUrl).toExternalForm();.Для меня это только исполняемый файл без ошибок.

Обновление: я тоже пробовал это:

ClassLoader classLoader1 = Main.class.getClassLoader();
String ImgUrl1 = classLoader1.getResource("path/picture.png").toExternalForm();

Image image = new Image(ImgUrl1);
Label img1 = new Label();
img1.setGraphic(new ImageView(image));

Выдает ту же ошибку, что и выше.

Обновление: Хорошо, кажется, что исполняемый JAR-файл не совпадает, чтобы найти изображение и другие данные в себе.Например, картинка лежит в папке с картинками, а приложение не может найти ее в папке с картинками. Так что это проблема с ссылками. Потому что я преобразовал его в проект maven, возможно, структура не правильная.Я постараюсь создать новый проект Maven и опубликовать результат здесь.

Поскольку это все распространенные способы импорта изображения в метку, я немного разочарован.Я надеюсь, что у кого-то есть решение этой крошечной проблемы.Ура!

1 Ответ

0 голосов
/ 25 января 2019

Я нахожу решение самостоятельно.Возникла проблема с файловой системой проекта maven и расположением кода.Ошибка произошла при использовании функции eclipse в [right click] > configure > convert to maven project.Это вызвало некоторые отсутствующие папки в файловой системе программы.Теперь можно просто ссылаться на файлы.

Решение - создать новый проект Maven и перенести все из старого проекта.Чем это сработало для меня.Ура! * * 1006

...