Получить уведомление о завершении процесса Java - PullRequest
6 голосов
/ 05 ноября 2008

Существует консольное Java-приложение, которое должно запускаться до тех пор, пока оно не будет остановлено Ctrl + C или закрытием окна консоли. Как запрограммировать это приложение для выполнения кода очистки перед выходом?

Ответы [ 4 ]

14 голосов
/ 05 ноября 2008

Вы можете использовать Shutdown Hook .

По сути, вам нужно создать поток, который будет выполнять ваши действия по отключению, а затем добавить его в качестве ловушки отключения . Например:

class ShutdownHook extends Thread
{
    public void run()
    {
        // perform shutdown actions
    }
}

// Then, somewhere in your code

Runtime.getRuntime().addShutdownHook(new ShutdownHook())
2 голосов
/ 05 ноября 2008

Хук завершения работы - это путь, но имейте в виду, что нет никакой гарантии, что код действительно выполнен. Сбои JVM, сбои питания или простое «kill -9» в вашей JVM могут помешать очистке кода. Поэтому вы должны убедиться, что ваша программа остается в согласованном состоянии, даже если она была прервана внезапно.

Лично я просто использую базу данных для всех состояний хранения. Его модель транзакций гарантирует, что постоянное хранилище находится в нормальном состоянии независимо от того, что происходит. Они проводят годы, делая этот код безошибочным, так почему я должен тратить свое время на уже решенные проблемы.

1 голос
/ 01 февраля 2012

Программа для удаления временного файла bat.bat при выходе из программы:

public class Backup {

    public static void createBackup(String s)
    {

        try{
            String fileName ="C:\\bat"+ ".bat";
            FileWriter writer=new FileWriter(fileName);
            String batquery="cd C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin"
                    + "\nmysqldump -uroot -proot bankdb > \""+s+".sql\""                    
                    +"\nexit";

            writer.append(batquery);
            writer.close();
        }
        catch(Exception e){e.getMessage();}
        try{
            Process p =Runtime.getRuntime().exec("cmd /c start C:\\bat.bat");

        }
        catch(Exception e){e.getMessage();}
        ShutDownHook sdh=new ShutDownHook();
        Runtime.getRuntime().addShutdownHook(sdh);
    }


}

  class ShutDownHook extends Thread
    {
        public void run()
    {
        try
        {
            File f=new File("c:/bat.bat");
            f.delete();
        }
        catch(Exception e){e.getMessage();}

    }

    }
0 голосов
/ 01 февраля 2012

Код, написанный внутри метода Thread s run(), будет выполнен, когда завершится объект времени выполнения ...

class ShutdownHookclass extends Thread {
    public void run() {
        // perform shutdown actions
    }
}

//could be written anywhere in your code
Runtime.getRuntime().addShutdownHook(new ShutdownHookclass())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...