[英]Capture "quit" from dock icon in Java App
在 OS X 上(也可能在 Windows 上,但還沒有嘗試過),我需要通過確認來中斷退出應用程序的選擇。 注意:這不是窗口上的關閉按鈕,而是從 Dock 圖標和應用程序菜單中選擇退出。 順便說一句,如果它們不同,那么我需要兩個聽眾。 覆蓋processWindowEvent
並設置setDefaultCloseOperation()
似乎不起作用。
注意:我找到了適用於 Mac 的解決方案,並從接受的答案中包含了適用於 Windows 的代碼。 見下文。
既然你提到了setDefaultCloseOoperation()
我假設你在談論JFrame
。
這是您如何做到這一點。
this.addWindowListener(new java.awt.event.WindowAdapter()
{
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent)
{
int ret = JOptionPane.showConfirmDialog(MyJFrame.this, "Are you sure you want to quit?");
if(ret == JOptionPane.YES_OPTION)
{
dispose();
}
}
});
好的,如果其他人對此感興趣,以下是我發現在我的情況下有效的方法:
編輯更新:我已經在 Windows 10 和 OSX Yosemite 上進行了測試,並且可以正常工作。 我在下面合並了 James Wierzba 的代碼。
為 Apple 退出處理程序創建一個單獨的類文件(Apple 庫不包含在 Windows JDK 中):
import com.apple.eawt.AppEvent;
import com.apple.eawt.Application;
import com.apple.eawt.QuitHandler;
import com.apple.eawt.QuitResponse;
public class AppleQuitHandler {
public static void DoAppleQuit() {
Application a = Application.getApplication();
a.setQuitHandler(new QuitHandler() {
@Override
public void handleQuitRequestWith(AppEvent.QuitEvent quitEvent, QuitResponse quitResponse) {
int ret = JOptionPane.showConfirmDialog(null, "Are you sure");
if (ret == JOptionPane.YES_OPTION) {
// Go ahead and exit
quitResponse.performQuit();
} else {
// Return to program
quitResponse.cancelQuit();
}
}
}
};
}
有條件地向根 JFrame 添加一個監聽器(Windows 退出):
String OS = System.getProperty("os.name").toLowerCase();
if(OS.contains("win")) {
myJFrame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int ret = JOptionPane.showConfirmDialog(null, "Are you sure");
if (ret == JOptionPane.YES_OPTION) {
songFrame.dispose();
System.exit(0);
}
}
});
}
最后為 AppleQuitHandler() 添加條件:
String OS = System.getProperty("os.name").toLowerCase();
if(OS.contains("mac")) {
AppleQuitHandler.DoAppleQuit();
}
您現在應該有一個適用於 Mac 和 Windows 的工作解決方案來捕獲菜單和快捷鍵的關閉。
注意:這沒有經過徹底測試,但我確實在 Mac 和 Windows 上嘗試過。
僅供參考:您需要添加 Apple 庫才能在 Windows 上進行編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.