Tôi đã thử một addWindowListener
và triển khai windowClosing
, nó hoạt động, khi tôi nhấn nút đóng, nhưng khi tôi sử dụng Cmd+Q
để đóng, số windowClosing
không được gọi, làm cách nào tôi có thể giải quyết? Tôi có cần phát hiện Cmd+Q
trên mac, Alt + F4
trên cửa sổ thông qua trình nghe chính không? Đó có phải là một người nghe chung cho việc đóng cửa sổ, bất cứ điều gì thông qua nút đóng hoặc bàn phím, hoặc sự kiện Ctrl+Alt+Delete
hoặc Cmd+Option+Esc
để tập trung tiêu diệt? Cảm ơn.Làm cách nào để phát hiện JFrame bị đóng?
Trả lời
Có vẻ như bạn cần thêm một số KeyListeners
và một nhà máy để phát hiện một thiết bị bạn muốn cho một hệ điều hành cụ thể.
Tôi không chắc chắn những gì tình hình là trên máy Mac, nhưng trên Windows bạn sẽ có được gọi lại windowClosing() từ nút đóng; Alt-F4
; và nếu bạn đóng ứng dụng thông qua trình quản lý tác vụ. Bạn không nhận được cuộc gọi lại nếu bạn sử dụng trình quản lý tác vụ để giết quá trình, nhưng tôi sẽ không mong đợi điều đó.
Bạn đã nhớ gọi số setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
trên phiên bản JFrame của bạn phải không?
Bạn có thể sử dụng thư viện OSX này: com.apple.eawt.ApplicationListener
handleQuit(ApplicationEvent event)
lẽ sẽ làm các trick.
Thông tin từ các tài liệu:
gọi khi ứng dụng được gửi sự kiện Thoát. Sự kiện này được tạo khi người dùng chọn Thoát khỏi menu ứng dụng, khi người dùng gõ Command-Q hoặc khi người dùng kiểm soát nhấp chuột vào biểu tượng ứng dụng của bạn trong Thanh công cụ và chọn Thoát. Bạn có thể chấp nhận hoặc từ chối yêu cầu thoát.
Tất nhiên, giải pháp này sẽ không hoạt động trên Windows. Theo như tôi biết có tuy nhiên không có giải pháp phổ quát, vì vậy đây có lẽ là cách tốt nhất để đi.
có thêm một phương pháp windowClosed() thử ghi đè phương thức điều. hy vọng nó sẽ làm việc cho bạn.
Như bạn đã nói windowClosing được gọi khi bạn nhấp vào nút (x). Tôi cũng trên mac và cách tôi nhận được CMD + Q để gửi một tín hiệu đến các ứng dụng đang sử dụng Runtime.addShutDownHook
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// code to run when CMD+Q is pressed
}
}
- 1. Cách ngăn JFrame đóng
- 2. Phát hiện thấy PopupMenu bị đóng ở cấp API 11
- 3. Làm cách nào để tạo một chuỗi chờ JFrame đóng trong Java?
- 4. Phát hiện khi biểu mẫu đã bị đóng C#
- 5. Làm cách nào để phát báo thức trong iOS nếu ứng dụng bị đóng?
- 6. Làm cách nào để ngăn công cụ nhà phát triển Chrome đóng khi cửa sổ trình duyệt hiện tại đóng?
- 7. Làm thế nào để vô hiệu hóa (hoặc ẩn) nút đóng (x) trên JFrame?
- 8. Làm thế nào để có thể một Swing WindowListener phủ quyết JFrame đóng
- 9. Đóng một JFrame mà không đóng một tài khoản khác?
- 10. Phát hiện đóng HTTP bằng cách sử dụng inet
- 11. phát hiện khi ứng dụng được đóng
- 12. Làm cách nào để làm cho JFrame trong suốt?
- 13. Làm thế nào để phát hiện khi một cổng nối tiếp đã được thiết bị đóng trong java?
- 14. Làm cách nào để phát hiện các trường bị thiếu trong tệp CSV theo cách Pythonic?
- 15. Làm cách nào để phát hiện thiết bị đã được phát hiện và ghép nối có sẵn?
- 16. Làm cách nào để git phát hiện các tệp tương tự, để phát hiện đổi tên?
- 17. Làm cách nào để tập trung vào JFrame?
- 18. Làm cách nào để đóng tất cả các giai đoạn khi giai đoạn chính bị đóng?
- 19. Làm thế nào để TDD một JFrame?
- 20. Làm cách nào để thêm JTextField vào MenuBar của JFrame?
- 21. Làm cách nào để hiển thị BufferedImage trong JFrame?
- 22. Tôi làm cách nào để cuộn JFrame bằng JScrollbar?
- 23. Làm cách nào để phát hiện bàn phím libgdx
- 24. Làm cách nào để phát hiện hỗ trợ rel = "noreferrer"?
- 25. Làm cách nào để phát hiện kết nối JMS bị hỏng/khôi phục trong Apache Camel?
- 26. Làm cách nào để phát hiện nén JPEG 2000 không bị mất?
- 27. Làm cách nào để phát hiện điểm ngắt đang bị xóa trong Visual Studio?
- 28. Làm cách nào để phát hiện xem máy ảnh có bị hạn chế bởi người dùng
- 29. Làm cách nào để phát hiện cảm ứng trong cocos2d?
- 30. Làm cách nào để phát hiện dpi trên iPad mini?
http://stackoverflow.com/questions/2061194/swing-on-osx-how -to-trap-command-q – dacwe
http://www.leepoint.net/notes-java/GUI/containers/10windows/12frameclose.html –
@TedWong Bạn có tìm thấy giải pháp cho vấn đề của mình không? Xin vui lòng gửi câu trả lời của riêng bạn nếu bạn đã làm. – Igor