当前位置: 首页 > 知识库问答 >
问题:

JavaFX:ImageView无法加载由程序本身创建的图像。错误:java。lang.IllegalArgumentException:

饶高雅
2023-03-14

我正在尝试创建一个程序,其中用户从他们计算机上的不同文件夹中选择图像,JavaFX将该图像复制到项目目录中以备将来使用。将创建一个新文件夹来存储新创建的图像文件。这本质上是选择图像并将其复制到项目目录中的代码:

Stage window = (Stage) ap.getScene().getWindow();
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Select Image File");
File selectedFile = fileChooser.showOpenDialog(window);

//Creates a new directory for the new calendar that the user wants to create
File file = new File("src/DefaultUser/" + nameField.getText() + "/");
file.mkdir();

//Creates a new file name with logo as the name, but keeping the extension the same
int index = selectedFile.getName().lastIndexOf(".");
String ext = selectedFile.getName().substring(index);

//Stored in newFileName
String newFileName = "logo" + ext;

File newFile = new File(file.getPath() + "/" + newFileName);

//Copies the selected file into the project src folder, with newFileName as the new file name
Files.copy(selectedFile.toPath(), newFile.toPath());

然后程序移动到不同的场景,因此不同的控制器实际上将图像加载到ImageView中。我知道图像的路径正常工作,但无论出于何种原因,程序都无法找到图像文件将其加载到ImageView中。

下面是用于此目的的基本代码:

image.setImage(new Image("DefaultUser/" + imagePath));

在这种情况下,不要担心imagePath是什么,因为我绝对肯定它会指向新创建的图像文件的正确位置。这是因为如果我关闭JavaFX程序并重新运行它,图像就会正确加载。

起初,我认为这是因为图像需要时间才能复制到项目目录中,但我检查了该文件是否确实存在于代码中,它确实存在,但情况显然并非如此。我试着用线。sleep()将程序延迟一点,这样代码可能有更多的时间来复制文件,但仍会抛出相同的错误:java。lang.IllegalArgumentException:无效URL:无效URL或未找到资源

最奇怪的是,这个程序运行得非常好,只是我必须重新启动JavaFX程序,它才能检测到图像文件,即使我知道它存在。JavaFX和创建新文件并在同一个程序中访问它们是否有些奇怪?我真的迷路了。提前非常感谢您的帮助,如果这不能提供足够的信息,我很抱歉,因为我不想解释整个项目。

共有1个答案

公孙志尚
2023-03-14

就像haraldK和James_D在评论中说的,把东西放在src文件夹通常是个坏主意。我通过将文件夹移到项目目录中解决了这个问题。

 类似资料:
  • 我试图在JavaFX中实现一个非常简单的Raspberry Pi接口。我用的是一台电脑。基于fxml的布局和样式我的项目与css。我的问题是,尽管该应用程序在我的主计算机(从eclipse运行)上运行得很好,但它在Raspberry上也不工作,当我尝试在主计算机上运行导出的jar时也不工作。 我就是这样把纽扣剥皮的。当然,resources/images文件夹位于我的构建路径中。按钮的颜色与我在c

  • 我的application.properties文件 spring.datasource.url=jdbc:mysql:/127.0.0.1:3306/demo?usessl=false spring.datasource.username=root spring.datasource.password=root spring.jpa.properties.hibernate.dialect.my

  • 我的Build.Gradle文件 UPD.这个简单的应用程序可以加载图片从互联网,但它不能加载图片从我的服务器。我的服务器的一些图片加载得很好,但其他的不是。我已经迷路了

  • 问题内容: 我有一个简单的Chrome扩展程序,该扩展程序使用内容脚本功能来修改网站。更具体地说,所述网站。 由于某些原因,即使扩展中打包了本地图像,我似乎也无法使用它。 就是这样,最简单的CSS …但是它不起作用。浏览器不会加载图像。 问题答案: 您的图片网址应类似于 您最好通过JavaScript替换CSS。

  • 我刚刚创建了一个新的模板与与reactv17包括,我安装了eslint依赖,因为我以前,这是我的package.json文件 这是我的eslintrc.json:(注意我还没有添加所有的规则) 当我运行应用程序时,由于以下错误,应用程序将无法编译: 我在以前的项目中工作过,代码中显示了eslint错误,但没有导致应用程序崩溃。有人能指出我把事情弄糟的地方吗? 谢谢

  • 这是我的代码: controller.java main.java 当我运行我的项目并在文本字段中键入1并单击按钮时,它将显示图片。现在,在不关闭程序的情况下,我将一个2.png文件添加到res文件夹中。并在文本字段中键入2。点击该按钮后,它给我“java.lang.IllegalArgumentException:Invalid URL:Invalid URL或resource not Foun