Как определить, выполняется ли моя программа как апплет или как Java-приложение

#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 не рекомендуется, если вы не можете гарантировать наличие менеджера безопасности и соответствующего файла политики. В отсутствие менеджера безопасности этот метод всегда будет выдавать исключение для проверки разрешений, что было бы нежелательно, когда приложение запущено не как апплет.