Có một ứng dụng Java trên bàn điều khiển được cho là chạy cho đến khi nó bị dừng lại bởi Ctrl + C hoặc đóng cửa sổ bảng điều khiển. Làm thế nào ứng dụng đó có thể được lập trình để thực thi một mã làm sạch trước khi thoát?Nhận thông báo về chấm dứt quá trình Java
Trả lời
Bạn có thể sử dụng Shutdown Hook.
Về cơ bản, bạn cần tạo một Chủ đề sẽ thực hiện các hành động tắt máy của bạn và sau đó add it as a shutdown hook. Ví dụ:
class ShutdownHook extends Thread
{
public void run()
{
// perform shutdown actions
}
}
// Then, somewhere in your code
Runtime.getRuntime().addShutdownHook(new ShutdownHook())
Móc tắt là cách để thực hiện, nhưng lưu ý rằng không có gì đảm bảo rằng mã thực sự được thực thi. Sự cố JVM, sự cố mất điện hoặc một "kill -9" đơn giản trên JVM của bạn có thể ngăn mã không bị xóa. Vì vậy, bạn phải đảm bảo rằng chương trình của bạn vẫn ở trạng thái nhất quán ngay cả khi nó đã bị hủy bỏ đột ngột.
Cá nhân, tôi chỉ đơn giản sử dụng cơ sở dữ liệu cho tất cả lưu trữ trạng thái. Mô hình giao dịch của nó đảm bảo rằng lưu trữ liên tục ở trạng thái thông minh bất kể điều gì xảy ra. Họ dành nhiều năm để làm cho mã ngu ngốc đó, vậy tại sao tôi nên lãng phí thời gian của mình vào những vấn đề đã được giải quyết.
Mã được viết bên trong một Thread
s run()
phương pháp sẽ thực hiện khi đối tượng runtime chấm dứt ...
class ShutdownHookclass extends Thread {
public void run() {
// perform shutdown actions
}
}
//could be written anywhere in your code
Runtime.getRuntime().addShutdownHook(new ShutdownHookclass())
Chương trình xóa tập tin tạm thời bat.bat khi chương trình được thoát:
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();}
}
}
- 1. Chấm dứt quá trình chạy với `exec` khi chương trình chấm dứt
- 2. Thông báo chấm dứt đối tượng C++
- 3. phantomjs exit() không chấm dứt quá trình
- 4. Quy trình con chấm dứt khi quá trình cha mẹ chấm dứt trong C#
- 5. Chương trình Java chấm dứt bất ngờ mà không có bất kỳ thông báo lỗi nào
- 6. Chấm dứt quá trình chạy bên trong valgrind
- 7. Có thể thoát() không chấm dứt quá trình không?
- 8. Process.Close() không được chấm dứt quá trình tạo ra, C#
- 9. Tài nguyên giao dịch khi chấm dứt quá trình
- 10. Xác định pid của quá trình chấm dứt
- 11. Cách hủy thông báo về việc chấm dứt ứng dụng không mong muốn/buộc
- 12. C#: Process.HasExited trả về false mặc dù quá trình này đã chấm dứt
- 13. Thông báo địa phương về việc chấm dứt đơn đăng ký
- 14. Quá trình Windows được thực thi từ Java không chấm dứt
- 15. Chấm dứt Chương trình Python
- 16. cách chuỗi chấm dứt trong java?
- 17. Lỗi nội bộ của trình biên dịch. Quá trình chấm dứt với mã số 3
- 18. null chấm dứt chuỗi
- 19. điều khiển chương trình chấm dứt nhắn trong nhật thực
- 20. Cách được thông báo khi một sợi đã bị chấm dứt vì một số lỗi
- 21. Chấm dứt yêu cầu ExpressJS
- 22. python multiprocessing pool chấm dứt
- 23. C# - Chấm dứt Application.Run()
- 24. Quá trình đa xử lý chấm dứt không thành công trên Linux
- 25. Làm thế nào để chấm dứt quá trình từ Python bằng cách sử dụng pid?
- 26. Tại sao subprocess.Popen không chờ đợi cho đến khi quá trình con chấm dứt?
- 27. BlackBerry: "Ứng dụng không phản hồi; quá trình chấm dứt" vì UiApplication.getUiApplication(). PopScreen()?
- 28. Chấm dứt Macro Từ thực hiện sâu hơn về xác nhận
- 29. Cách chấm dứt một quy trình trong vbscript
- 30. Lỗi Iphone Chấm dứt để phản hồi việc chấm dứt SpringBoard
+ 1 - Có lẽ bạn có thể xây dựng với một ví dụ hướng dẫn? ... – johnstok
Ví dụ được thêm vào. Cảm ơn. –