Будучи убежденным ("обученный"), что приложения Swing на Mac действительно выглядят собственными, я пытаюсь сделать мой взглядом максимально собственный. Все выглядит большим, но когда я поразил command+Q или делаю это из меню, моего windowStateChanged(WindowEvent e)
не стреляет в мой основной JFrame (если я выхожу каким-либо другим способом, он действительно стреляет). Как я могу ответить на реальный выход Apple?
Вы можете реализовать COM.apple.eawt.Appliclistener
и отвечать на событие Quit
. Пример можно найти пример Mac OS X Reference Library osxAdapter .
Дополнение: см. Java для Mac OS X 10.6 Обновление 3 и 10.5 Обновление 8 Отзыв Примечания Для информации о снижении, переработанные COM.apple.awt.Apt.Application
Класс, а также Расположение Документации API для расширений Apple Java. Control-Click или щелкните правой кнопкой мыши на файле .jdk
на Содержание пакета
. Вы можете просматривать классы com.apple.eawt
среди источников OpenJDK.
Как показано в этом разделе пример , вы можете указать желаемое
QuitStrategy
; A 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);
Console, после ⌘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);
}
}
Это довольно хороший вопрос, и я должен признать, что у меня нет ответа . Однако, пару лет назад, когда я работал над Java-приложением и столкнулся с этой проблемой, я решил ее, зарегистрировав крючок выключения с временем выполнения, который бы делал то, что я хотел, чтобы приложение делало перед выходом. Это тяжелое решение, но оно сработало. Вы можете взглянуть на мой код и посмотреть, поможет ли он.
Я не слышал об использовании LCG для генерации фиксированного веса удара (я не получил этого глубоко в коды удара в школе, поэтому я тоже не слишком удивлен:).
В любом случае достаточно просто генерировать кучу битов с фиксированным ударным весом. Вот немного кода питона, который возвращает n -разрядное число с определенным весом. Это должно легко переводиться и на другие языки (помимо того, что питоновые целые числа произвольно велики).
from random import randrange
def get_ham_and_bits(weight, nbits=32):
"Get n-bits with a fixed hamming weight"
if weight > nbits:
return 1 < nbits
result = 0
for i in xrange(weight):
bit = 1 << randrange(nbits)
# only flip bits that aren't already flipped. delete the loop to
# make this return a random weight instead of a fixed weight
while bit & result != 0:
bit = 1 << randrange(nbits)
# An XOR might be a better idea here, especially if you remove the loop.
result |= bit
return result
-121--4529253- По источникам , scipy.io.wavfile.read (somfile)
возвращает кортеж из двух предметов: первый - частота дискретизации в выборках в секунду, второй - массив numpy
со всеми данными, считанными из файла. Выглядит довольно легко в использовании!
eg:
from scipy.io import wavfile
fs, data = wavfile.read('./output/audio.wav')
-121--870558- Пробовали ли вы установить в меню команду - Q в качестве акселератора? Можете ли вы заставить ваше приложение ответить на него?
Я не положительный, но я думаю, что это работает в Linux и, вероятно, Windows с эквивалентным Alt - F4 . Мое приложение отвечает на «убойный» нажатие клавиши, я обрабатываю некоторый код очистки, а затем делаю программный System.exit ()
.
Если вы «просто» после изящной обработки выхода, вы можете также захотеть поймать WindowEvent
WINDOW _ CLOSING
, где традиционно «вы уверены?» все делается.