系统托盘临时文件关闭挂钩

时间:2013-12-17 15:09:34

标签: java debugging

我已经在我的程序中创建了一个临时文件,当我强行关闭时,它会被关闭钩子删除,但是当我正常退出时,虽然退出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();

   }
});
}
}

1 个答案:

答案 0 :(得分:0)

addShutdownHook {{1}}明确指出如果JVM强行关闭,可能无法执行钩子。在关闭应用程序时,无法让代码“确定”运行。

顺便说一句,如果您要做的就是在JVM关闭时删除文件,您可以使用javadoc要求运行时执行此操作。这种方法当然要受前一段的约束。

如果您File.deleteOnExit创建一个临时文件(在临时文件目录中等等),操作系统可能会不时地清理掉任何一个版本。