Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 24.05.07 08:51
Оценка:
Уважаемые, подскажите, пожалуйста, возможно ли в апплете поймать событие, что в браузере нажали кнопку, например, "Предыдущая" и ушли на другую страницу?

Более подробно проблема:
Апплет подключен по TCP к серверу. Если в браузере нажать "Назад" и загрузить еще раз апплет, получается два инстанса апплета, два активных коннекта. Что плохо.

Надо как-то отслеживать, что ушли со страницы с первым апплетом и в этот момент принудительно разорвать TCP-коннект. И если загрузят второй раз инстанс апплета, то лишь он будет активным. Т.е. задача, чтоб был один активный апплет, от одног окна браузера.

Возможно ли это в принципе, или я что-то неправильно сархитекурничал?

Спасибо.
Re: Апплет. Как поймать событие?
От: Antei США  
Дата: 24.05.07 09:38
Оценка:
Здравствуйте, Евгений Чернов, Вы писали:

ЕЧ>Уважаемые, подскажите, пожалуйста, возможно ли в апплете поймать событие, что в браузере нажали кнопку, например, "Предыдущая" и ушли на другую страницу?

В апплете, думаю, нет.

ЕЧ>Более подробно проблема:

ЕЧ>Апплет подключен по TCP к серверу. Если в браузере нажать "Назад" и загрузить еще раз апплет, получается два инстанса апплета, два активных коннекта. Что плохо.
Два инстанса апплета? Может, все таки один, просто инициализация не там стоит (например, в start() ) и получается что она была вызвана 2 раза?
Попробуй так: в init() подготавливаем всякие данные, но коннект не устанавливаем. В start() устанавливаем коннект, в stop() тушим.

ЕЧ>Надо как-то отслеживать, что ушли со страницы с первым апплетом и в этот момент принудительно разорвать TCP-коннект.

start(), stop().

ЕЧ>И если загрузят второй раз инстанс апплета, то лишь он будет активным. Т.е. задача, чтоб был один активный апплет, от одног окна браузера.

ЕЧ>Возможно ли это в принципе, или я что-то неправильно сархитекурничал?
Посмотри в сторону Java Web Start. Это гораздо лучше чем апплет. Никаких тебе ограничений веб страницы, start(), stop().
Re[2]: Апплет. Как поймать событие?
От: Antei США  
Дата: 24.05.07 09:40
Оценка:
Здравствуйте, Antei, Вы писали:

A>Здравствуйте, Евгений Чернов, Вы писали:


ЕЧ>>Уважаемые, подскажите, пожалуйста, возможно ли в апплете поймать событие, что в браузере нажали кнопку, например, "Предыдущая" и ушли на другую страницу?

A>В апплете, думаю, нет.
В смысле — отловить нажатие кнопок браузера. Зато можно поймать stop(), start().
Re[3]: Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 24.05.07 09:45
Оценка:
Здравствуйте, Antei, Вы писали:

A>Здравствуйте, Antei, Вы писали:


A>>Здравствуйте, Евгений Чернов, Вы писали:


ЕЧ>>>Уважаемые, подскажите, пожалуйста, возможно ли в апплете поймать событие, что в браузере нажали кнопку, например, "Предыдущая" и ушли на другую страницу?

A>>В апплете, думаю, нет.
A>В смысле — отловить нажатие кнопок браузера. Зато можно поймать stop(), start().

Уже копал в эту сторону. В том-то и фишка. Что start() и stop() не вызываются!!
Такое ощущение будто апплет работаем в бэкграунде браузера и даже не понимает, что его уже давно не отображают.
Re[2]: Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 24.05.07 11:31
Оценка:
Здравствуйте, Antei, Вы писали:

A>Посмотри в сторону Java Web Start. Это гораздо лучше чем апплет. Никаких тебе ограничений веб страницы, start(), stop().


Спасибо за советы.
WebStart не подходит, тогда придется архитектуру всю переделывать, а во-вторых убьются преимущества апплета, что из любой ОС, из любого браузера, ничего не качая зашел и апплет работает
Re[3]: Апплет. Как поймать событие?
От: Аноним  
Дата: 24.05.07 12:57
Оценка:
Здравствуйте, Евгений Чернов, Вы писали:

, а во-вторых убьются преимущества апплета, что из любой ОС, из любого браузера, ничего не качая зашел и апплет работает

Нет уже давно этого преимущества. java — плагин надо качать, если он не предустановлен производителем компьютера (Dell ставит) и если компьютер не Mac. И вообще смешивать несколько технологий (html + applet, а некоторые еще и взаимодействие javascript с апплетом делают) на мой взгляд неправильно. Пользователь одновременно может работать с другими сайтами и другими апплетами. Каша. Если апплет, то только апплет и открывается он в отдельном окне без кнопок вперед-назад, а родительское окно браузера лучше закрыть. Но тогда webstart даже лучше, потому что не связан с браузером.
Re[3]: Апплет. Как поймать событие?
От: Antei США  
Дата: 24.05.07 13:55
Оценка:
Здравствуйте, Евгений Чернов, Вы писали:

ЕЧ>Здравствуйте, Antei, Вы писали:


A>>Посмотри в сторону Java Web Start. Это гораздо лучше чем апплет. Никаких тебе ограничений веб страницы, start(), stop().


ЕЧ>Спасибо за советы.

ЕЧ>WebStart не подходит, тогда придется архитектуру всю переделывать, а во-вторых убьются преимущества апплета, что из любой ОС, из любого браузера, ничего не качая зашел и апплет работает

Преимуществ у апплета перед JWS — нету, как раз наоборот.

Переделок при переходе — реально немного. Вместо апплета в HTML странице ставится линк на *.jnlp файл. Файл можно отдавать своим сервлетом, через него же передаем параметры со страницы. Грузится файл, открывается окно приложения. Все.

Что для апплета, что для JWS пользователю нужно иметь установленный Java Plugin. В случае JWS нужно чтобы был он был установлен в системе (для открытия jnlp файлов). Но JWS давно инсталлируется вместе с JRE, не помню с какой уж версии.
Re[4]: Апплет. Как поймать событие?
От: mselez  
Дата: 24.05.07 17:38
Оценка:
Здравствуйте, Antei, Вы писали:


A>Преимуществ у апплета перед JWS — нету, как раз наоборот.


Одно из преимуществ JWS перед апплетами в том, что в JWS есть возможность задавать параметры виртуальной машины — память, например. У апплета — нельзя!
Re[4]: Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 25.05.07 05:59
Оценка:
Здравствуйте, Евгений Чернов, Вы писали:

A>>В смысле — отловить нажатие кнопок браузера. Зато можно поймать stop(), start().


ЕЧ>Уже копал в эту сторону. В том-то и фишка. Что start() и stop() не вызываются!!

ЕЧ>Такое ощущение будто апплет работаем в бэкграунде браузера и даже не понимает, что его уже давно не отображают.
__________________________________

Поправляюсь. Провел более чистый эксперимент.
start(), stop() действительно ловятся!
Кроме того и init с destroy() тоже сразу же вызываеются при переходе по кнопка вперед, назад.

А ложное ощущение у меня было, т.к. внешний вид апплета оставался одним и тем же — так это у меня start() отрабатывало одинаково. Стоило лишь поменять что-то внешне на апплете, после НАЗАД, ВПЕРЕД на браузере, все заново застрартилось.

Спасибо всем!
Re[4]: Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 25.05.07 06:03
Оценка:
Здравствуйте, Antei, Вы писали:

A>Что для апплета, что для JWS пользователю нужно иметь установленный Java Plugin. В случае JWS нужно чтобы был он был установлен в системе (для открытия jnlp файлов). Но JWS давно инсталлируется вместе с JRE, не помню с какой уж версии.


Во!! У рядового пользователя который тыкнулся в браузер не откроется.
А апплет откроется, т.к. Java-машина по-умолчанию ставится точно на винду как минимум.
Re[5]: Апплет. Как поймать событие?
От: Евгений Чернов  
Дата: 25.05.07 06:04
Оценка:
Здравствуйте, mselez, Вы писали:

M>Здравствуйте, Antei, Вы писали:



A>>Преимуществ у апплета перед JWS — нету, как раз наоборот.


M>Одно из преимуществ JWS перед апплетами в том, что в JWS есть возможность задавать параметры виртуальной машины — память, например. У апплета — нельзя!


Это специфическая задача. Для большинства апплетов оно не надо IMHO
Re[5]: Апплет. Как поймать событие?
От:  
Дата: 25.05.07 10:02
Оценка:
Hello, Евгений Чернов!
You wrote on Fri, 25 May 2007 06:03:15 GMT:

ЕЧ> А апплет откроется, т.к. Java-машина по-умолчанию ставится точно

ЕЧ> на винду как минимум.

Это уже не так. JVM от MS удаляется из системы при установке первого сервис-пака к Windows XP. В Висте ее тоже разумеется нет. Собственно, MSJVM заканчивает свою жизнь в конце этого года — Microsoft Java Virtual Machine Support
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.