嗨,在启动cmd\设计javafx\cmd日食时,我的文件没有删除也没有复制



我的程序会复制自己并删除自己。如果我在没有cmd\javafx的情况下运行它,那么一切都在应对和删除,但如果使用cmd\javafx,那么它就停止了应对和删除。 为什么会这样?我怎样才能绕过这个陷阱。 是的,如果复制并删除任何其他字段,那么一切都可以 代码(副本(:

FileChannel source = new FileInputStream(new File(jarLocate)).getChannel();
FileChannel dest = new FileOutputStream(new File("C:\Users\"+System.getProperty("user.name")+"\"+jarName)).getChannel();
try {
source.transferTo(0, source.size(), dest);
} finally {
source.close();
dest.close();
}

代码(删除(:

File file = new File(rd);
if (file.delete()) {
System.out.println(" Файл "+rd+" успешно удалён!");
} else {
System.out.println(" Файл "+rd+" не существует.");
}

这只是一个理论,但可能发生的情况是,当您运行JavaFX时,JavaFX在JAR文件上放置了一个"文件锁定",因为它"可能"需要来自JAR的资源(图像,图标,翻译文件(。为了防止 JAR纵,它在程序执行时在 JAR 上声明一个独占文件锁,因此不会发生未定义的行为/异常。

当您在控制台中运行时,它不需要从 JAR 访问任何资源,因此不保证文件锁定来保证安全运行,因为它 100% 从内存运行,而没有(就默认库而言(依赖于 JAR 中的资源。

最新更新