#java #exception #applet
#java — язык #исключение #апплет #java
Вопрос:
Я написал неуклюжий маленький клон breakout и записываю на диск для сохранения игр и получения высоких результатов.
Есть ли простой способ проверить, запущена ли моя программа как апплет или как приложение?
например…
if(!anApplet){
//Include disk i/o features
}
Я пытался установить логическую переменную в классе ‘main’, установив для нее значение false с помощью init() и true в основном методе, но пока безуспешно. Буду продолжать попытки независимо, но заранее спасибо за любой совет!
Ответ №1:
Используйте AccessController. Вы могли бы обернуть все вызовы в AccessController.doPrivileged
блок.
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// privileged code goes here, for example, read and writing files.
...
return null; // nothing to return
}
});
Вы также могли бы, при необходимости, установить разрешения, которые имеет ваше приложение, при запуске и использовать их позже:
Boolean flag = AccessController.doPrivileged(new PrivilegedAction() {
public Boolean run() {
boolean flag = false;
// privileged code goes here, for example, read and writing files. If it succeeds, set flag to true.
...
return flag; // return true, if the privileged action succeeded
}
});
Я бы рекомендовал использовать первый подход. Если вы используете второе, то сделайте переменную flag окончательной по своей природе; поэтому вам нужно будет выполнить любое «тестирование привилегий» в конструкторе класса, который хранит этот флаг.
Добавление
Фрагменты кода будут продолжать выдавать AccessControlException
s, если они встречаются. Если вы хотите продолжить обработку, не мешая пользователю, тогда вам придется перехватывать их, установив флаг в false . AccessController.doPrivilege
Блок существует для проверки, существует ли разрешение для текущего фрейма стека.
Дополнение # 2
Использование AccessController.checkPermission
не рекомендуется, если вы не можете гарантировать наличие менеджера безопасности и соответствующего файла политики. В отсутствие менеджера безопасности этот метод всегда будет выдавать исключение для проверки разрешений, что было бы нежелательно, когда приложение запущено не как апплет.