Вы можете реализовать com.apple.eawt.ApplicationListener
и ответить на событие Quit
. Пример можно найти в справочной библиотеке Mac OS X , OSXAdapter .
Приложение: См. Java для Mac OS X 10.6 Обновление 3 и 10.5 Обновление 8 Примечания к выпуску для получения информации об устаревании, обновленном классе com.apple.eawt.Application
и расположении документации API для расширений Apple Java. Удерживая нажатой клавишу «Control» или щелкнув правой кнопкой мыши файл .jdk
, выберите Show Package Contents
. Вы можете просматривать классы com.apple.eawt
среди источников OpenJDK.
Как показано в этом полном примере , вы можете указать желаемый
QuitStrategy
; WindowListener
ответит на ⌘Q :
Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
Как отмечено здесь , вы можете установить свойство из командной строки
java -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS -cp build/classes gui.QuitStrategyTest
или в начале программы, перед публикацией каких-либо событий GUI:
System.setProperty("apple.eawt.quitStrategy", "CLOSE_ALL_WINDOWS");
EventQueue.invokeLater(new QuitStrategyTest()::display);
Консоль, после ⌘Q :
java.vendor: Oracle Corporation
java.version: 1.8.0_60
os.name: Mac OS X
os.version: 10.11
apple.eawt.quitStrategy: CLOSE_ALL_WINDOWS
java.awt.event.WindowEvent[WINDOW_CLOSING,opposite=null,oldState=0,newState=0] on frame0
Код:
package gui;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
/**
* @see https://stackoverflow.com/a/7457102/230513
*/
public class QuitStrategyTest {
private void display() {
JFrame f = new JFrame("QuitStrategyTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println(e);
}
});
f.add(new JTextArea(getInfo()));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private String getInfo() {
String[] props = {
"java.vendor",
"java.version",
"os.name",
"os.version",
"apple.eawt.quitStrategy"
};
StringBuilder sb = new StringBuilder();
for (String prop : props) {
sb.append(prop);
sb.append(": ");
sb.append(System.getProperty(prop));
sb.append(System.getProperty("line.separator"));
}
System.out.print(sb);
return sb.toString();
}
public static void main(String[] args) {
System.setProperty("apple.eawt.quitStrategy", "CLOSE_ALL_WINDOWS");
EventQueue.invokeLater(new QuitStrategyTest()::display);
}
}