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