我的程序复制自己并删除自己。如果我在没有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+" не существует.");
}
答案 0 :(得分:0)
这只是一个理论,但是可能发生的情况是,当您运行JavaFX时,JavaFX在JAR文件上放置了一个“文件锁”,因为它“可能”需要JAR中的资源(图像,图标,翻译文件)。为了防止JAR受到操纵,它在程序执行时要求JAR独占文件锁,因此不会发生未定义的行为/异常。
在控制台中运行时,它不需要从JAR中访问任何资源,因此不保证文件锁可以保证安全运行,因为它在没有内存的情况下100%从内存运行(就默认库而言)有关)对JAR中资源的依赖。