Статический класс Java-апплета

моя проблема заключается в том, чтобы сохранить некоторые пользовательские данные в апплете, чтобы уменьшить количество пользовательских операций. Я использую статические поля для этого. Но я заметил, что если пользователь переходит на несколько вкладок в браузере - начинается новый "поток" (или что-то в этом роде), и мой статический класс в этом новом потоке пуст. Может быть, есть другое решение для сохранения некоторых данных в апплете?

Изменить

В порядке. Подробнее. У меня есть апплет для цифровой подписи. Пользователь один раз выбирает сертификат (X509Certificate) и использует его для подписи всех документов. У меня есть такой класс:

   public class CertificateContainer
    {
        private static X509Certificate certificate;
        ...

person griZZZly8    schedule 26.07.2011    source источник


Ответы (3)


Апплеты в разных вкладках браузера являются независимыми программами. В зависимости от браузера и Java-плагина они могут работать даже на другой виртуальной машине, но даже если они находятся на одной виртуальной машине, они, скорее всего, имеют независимые загрузчики классов и не смогут взаимодействовать с помощью статических переменных.

Если вам нужно сохранить пользовательские данные, вы можете использовать JNLP API, например PersistenceService.

С плагином Sun 1.6 это будет доступно только в том случае, если ваш апплет был загружен JNLP, в плагине IcedTea (распространяемом с некоторыми версиями OpenJDK) он также доступен для апплетов, загруженных обычным тегом апплета (без JNLP).

(Я понятия не имею, как апплеты будут использовать CookieHandler.)

person Paŭlo Ebermann    schedule 26.07.2011

Использование статических полей для передачи пользовательского ввода между частями приложения является очень плохой практикой. Данные должны храниться в объектах, которые передаются по мере необходимости.

Но в вашем случае для обмена данными между несколькими апплетами лучшим решением было бы сохранить их в файлах cookie браузера с помощью java.net.CookieHandler

person Michael Borgwardt    schedule 26.07.2011
comment
mindprod.com/jgloss/cookie.html содержит пример использования CookieHandler в апплете. - person Paŭlo Ebermann; 26.07.2011

Похоже, вы не должны использовать статические поля для хранения пользовательских данных. Кроме того, я не думаю, что новая вкладка браузера создаст новый поток, потому что это должен быть совершенно отдельный экземпляр вашего апплета.

person Daniel Ball    schedule 26.07.2011
comment
Скорее всего, он будет использовать другой загрузчик классов (таким образом объясняя независимые статические переменные), но, конечно же, он также будет работать в отдельном новом потоке. - person Michael Borgwardt; 26.07.2011