8 Stimmen

Wie Java Systemunterbrechungen wie Ctrl+C behandeln kann

Ich habe ein Java-Programm, das eine Sperrdatei erstellt, um sicherzustellen, dass keine anderen Ausführungen zur gleichen Zeit wie es laufen. Wenn das Programm läuft, wird die Datei erstellt, und beim Beenden, entweder erfolgreich oder durch eine Ausnahme, wird die Datei entfernt. Wenn der Benutzer jedoch Strg+C drückt, das Terminal schließt oder die Ausführung auf andere Weise unterbricht, wird die Datei nicht gelöscht. Gibt es eine Möglichkeit, diesen Unterbrechungsbefehl zu erkennen und sicherzustellen, dass die Datei auch in diesem Fall gelöscht wird?

5voto

Amber Punkte 473552

Sie sollten sich vielleicht mit folgenden Themen befassen Abfahrhaken .

Außerdem ist dies wahrscheinlich ein Duplikat oder fast ein Duplikat dieser früheren SO-Frage von vor ein oder zwei Tagen:

Wie kann ich die Tastenkombination Strg+C in einer CLI-Anwendung "abfangen"?

2voto

jsight Punkte 27087

Die einzige Möglichkeit, damit umzugehen, besteht darin, die Protokolldatei mit einem Zeitstempel zu versehen und die Datei alle paar Sekunden mit einem neuen Zeitstempel zu aktualisieren. File.deleteOnExit ist hilfreich, aber keine Methode ist narrensicher (was passiert, wenn jemand einfach das Stromkabel zieht?).

Wenn Sie einen Zeitstempel schreiben, können Sie auf einen gültigen Zeitstempel (kürzlich geschrieben) prüfen und die Protokolldatei überschreiben, wenn sie zu stark veraltet ist. Auf diese Weise wird eine veraltete Sperrdatei dem Benutzer nicht in die Quere kommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X