最近,我尝试在Eclipse的JavaFx Maven项目中使用在标签上添加图片。如果我在Eclipse中运行该应用程序,则一切正常,并且不会发生错误。
这篇文章与以下内容不同:“为什么相对路径在JAR文件的JAVA中不起作用?”发布!我尝试了这篇文章的解决方案,但对我不起作用。我在下面描述了。
如果我从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));
,但是这里的月食引发错误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项目并将结果发布在这里。
因为这是我发现的将图片导入标签的所有常用方式,所以我有些沮丧。我希望有人可以解决这个小问题。干杯!
答案 0 :(得分:0)
我自己找到解决方案。 Maven项目的文件系统和代码的安排存在问题。通过使用[right click] > configure > convert to maven project
中的eclipse功能发生了错误。这导致该程序的文件系统中缺少某些文件夹。现在可以简单地引用文件。
解决方案是创建新的Maven项目并迁移旧项目中的所有内容。比它对我有用。干杯!