javafx-8 - 使用 Javafx 和 Maven 的 ImageView 的 URL 路径

标签 javafx-8 fxml

我正在设计一个 JavaFX 程序,使用 zenjava 基本原型(prototype)。一切正常,只是找到,除非我想使用 ImageView 小部件添加和图像。

我在 src/main/resources 下创建了一个名为 images 的新文件夹,我将要在 ImageView 上显示的图像存储在其中。

所以,根据这个图像存储在/src/main/resources/images/image.jpg

问题是我打开 SceneBuilder 并从文件夹 C:\Users\Toni\workspace\MyProject\src\main\resources\images\image.jpg 中拖放图像,我可以在屏幕上看到图像。我保存 fxml 文件,然后打开它,fxml 文件引用图像如下:

<ImageView fitHeight="200.0" fitWidth="200.0" layoutX="1463.0" layoutY="551.0">
     <image>
        <Image url="@../images/image.jpg" />
     </image>
  </ImageView>

但是,当我编译它并运行它时,出现此错误:
[INFO] --- javafx-maven-plugin:8.1.2:run (default-cli) @ QAdmin ---
[INFO] Running JavaFX Application
null/../images/wait_time_icon.png
Exception in Application start method
[WARNING] 
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:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:745)
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$156(LauncherImpl.java:182)
... 1 more
Caused by: javafx.fxml.LoadException: 
unknown path:57

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
at app.source.general.MainApp.start(MainApp.java:27)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
... 1 more
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1100)
at javafx.scene.image.Image.<init>(Image.java:681)
at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:47)
at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:37)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:763)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
... 11 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1092)
... 17 more

显然,对图像@../images/image.jpg 的引用无法正常工作。

所以,我的问题是:

我是否将图像资源放置在它应该放置的位置?
如何使用 fxml 正确引用此图像,以便在运行应用程序时找到图像文件?

谢谢!

最佳答案

假设以下位置:

src/main/java/ - for the Java classes
src/main/resources/fxml/view.fxml
src/main/resources/images/image.png

您应该可以引用 image.png来自 view.fxml使用:
<Image url="@/images/image.png" />

关于javafx-8 - 使用 Javafx 和 Maven 的 ImageView 的 URL 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483426/

相关文章:

checkbox - 在FXML中设置CheckBoxTableCell

面板内的 JavaFX 面板自动调整大小

javafx - 为什么即使 fxml 文件的路径正确,我也会收到 javafx.fxml.LoadException

JavaFx 将额外的 FXML 加载到 FXML 'template'

css - 应用 CSS 样式后,JavaFX ListView 多项选择不起作用

java - 使用 JavaFX 自动调整 TableView 中 TableColumn 的 TableColumn 大小 -8

JavaFX - 为什么 JavaFx 创建初级阶段而不是让我这样做?

JavaFX 如何在不改变线宽的情况下缩放路径的坐标?

java - 如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单

java - 如何使用 javafx fxml 单击设置按钮时打开上下文菜单。该操作应该是 Controller 中的某种方法