我有一个帧控制器类,我从表单(使用Javafx Scene Builder创建)中读取值并在控制其有效性后插入信息。我想要做的只是知道如何将图像插入舞台上的ImageView元素。
public class FrameController {
@FXML
private ImageView img_view;
....
@FXML
public void ButtonClicked() {
...
img_view = new ImageView();
Image img = new Image("../img/img.jpg");
img_view.setImage(img);
...
}
}
这不起作用。它在我单击绑定到ButtonClicked()函数的按钮后运行调试器。我错过了什么吗?如何将图像插入场景中的ImageView元素?我将非常感谢你的帮助。
答案 0 :(得分:1)
要解决的问题:
../
将不会解析为可由jar协议加载的URL(这是用于在打包的JavaFX应用程序中加载资源的标准协议)。因此,请勿在其中使用..\
的相对引用。而是使用绝对引用,例如:
/com/mycompany/myapp/myproject/img/img.jpg
要检查的一些事项(假设您已做出上述更改):
FXMLLoader
。fx:controller
属性。fx:id
img_view(确保它真的是fx:id
而不只是id
)。在控制器中添加一行:
System.out.println(FrameController.getClass().getResource(
"/com/mycompany/myapp/myproject/img/img.jpg").toExternalForm()
);
这将打印系统实际查找图像的位置。
确保您的构建系统正在将img.jpg复制到您的类输出目录。为此,在构建完成并假设构建创建名为myapp.jar的jar后,运行:
jar xvf myapp.jar
并查看img.jpg是否位于路径com / mycompany / myproject / img / img.jpg中。
创建img对象后,请调用:
img.isError();
查看图片是否有加载错误。