我正在尝试创建一个程序,在该程序中,用户从计算机上的不同文件夹中选择一个图像,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程序并重新运行它,图像就会正确加载。
起初,我认为这是因为图像复制到项目目录需要时间,但我检查了该文件是否确实存在于代码中,它确实存在,但事实显然并非如此。我尝试使用Thread.sleep((将程序延迟一点,这样代码就有更多的时间复制文件,但它仍然抛出了相同的错误:java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
最奇怪的是,这个程序运行得很好,只是我必须重新启动JavaFX程序,它才能检测到图像文件,尽管我知道它存在。JavaFX和创建新文件并在同一程序中访问它们有什么奇怪的地方吗?我真的很失落。提前非常感谢您的帮助,如果这没有提供足够的信息,我很抱歉,因为我不想解释整个项目。
就像haraldK和James_D在评论中所说的那样,把东西放在src文件夹中通常是个坏主意。我通过将文件夹移到项目目录中来解决这个问题。