2011-11-21 30 views
6

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?

+2

http://stackoverflow.com/questions/2061194/swing-on-osx-how -to-trap-command-q – dacwe

+0

http://www.leepoint.net/notes-java/GUI/containers/10windows/12frameclose.html –

+0

@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

Trả lời

1

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ể.

Check Out

2

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?

1

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.

2

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.

+0

+1 ví dụ http://stackoverflow.com/questions/7613577/java-how-do-i-prevent-windowclosing-from-actually-closing-the-window/7613768#7613768 – mKorbel

+0

phỏng đoán ngẫu nhiên? – kleopatra

+0

@ kleopatra Tôi có ba bài viết rất simlair, có bạn là đúng sau đó ngẫu nhiên ... – mKorbel

0

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 
    } 
} 
Các vấn đề liên quan