Статический класс Java-апплета - PullRequest
1 голос
/ 26 июля 2011

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

Редактировать

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

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

Ответы [ 3 ]

3 голосов
/ 26 июля 2011

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

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

2 голосов
/ 26 июля 2011

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

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

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

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

0 голосов
/ 26 июля 2011

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

...