我已经在我的程序中创建了一个临时文件,当我强行关闭时,它会被关闭钩子删除,但是当我正常退出时,虽然退出JButton它会通过shutdown hook删除文件。我哪里错了?
public class SystemTrayPostItNotes{
static File file = new File("C:\\Users\\...\Desktop\\On.txt");
public static void main(String[]args)throws Exception{
if(file.exists()){
System.out.println("another exists");
}else{
file.createNewFile();
PopupMenu popUp = new PopupMenu();
MenuItem exit = new MenuItem("Exit");
popUp.add(exit);
Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\...\\Desktop\\GeoGebra_icon_edit.png");
TrayIcon trayIcon = new TrayIcon(image, "Post It Notes Program", popUp);
SystemTrayPostItNotes tray = new SystemTrayPostItNotes();
SystemTray.getSystemTray().add(trayIcon);
addShutdownHook();
trayIcon.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
MainGuiNotes notes = new MainGuiNotes();
}
});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
}
}
public static void addShutdownHook()throws Exception{
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
file.delete();
}
});
}
}
答案 0 :(得分:0)
addShutdownHook
{{1}}明确指出如果JVM强行关闭,可能无法执行钩子。在关闭应用程序时,无法让代码“确定”运行。
顺便说一句,如果您要做的就是在JVM关闭时删除文件,您可以使用javadoc要求运行时执行此操作。这种方法当然要受前一段的约束。
如果您File.deleteOnExit
创建一个临时文件(在临时文件目录中等等),操作系统可能会不时地清理掉任何一个版本。