|
|
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Hi All, На странице апплет, который вызывает JMF для снятия картинки со страницы A, потом отправляет картинку на сервер по HTTP и переадресует браузер на страницу B. Почему-то при попытке перейти по линку со страницы B на страницу A возникает ошибка при создании плеера: UnsatisfiedLinkError Native Library jmvfw.dll already loaded in another classloader Поскольку при переходе на страницу B окно java консоли сразу не закрывается (надо ждать примерно минуту), создается впечатление, что апплет не выгружается. Соответственно, надо как-то заставить апплет выгрузиться либо по завершении снятии картинки как-то принудительно освобождать dll. Есть идеи? Картинка снимается так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:24:30 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
http://j-integra.intrinsyc.com/support/kb/Article.aspx?id=122967 Не очень понятно это у вас один апплет, или два разных? Если это один апплет, то надо подшаманить HTML, чтобы Java Plug-in идентифицировал апплет и запустил его в старом ClassLoader-е. Если это два разных апплета... Можно ошибку просто поймать и проигнорировать. DLL уже загружена - можно юзать. Можно JVM насильно потушить, если прав хватит. Тогда Java Plug-in её перезапустит. Но это уже грубо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:31:04 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Это один и тот же апплет, и страница одна и та же. Как в таком случае подшаманить HTML? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:39:17 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
АфриканецЭто один и тот же апплет, и страница одна и та же. Как в таком случае подшаманить HTML? Там в статье написано - codebase и archive в объявлении апплета должны совпадать с точностью до символа. http://rsdn.ru/forum/java/1273331.1 Тогда будет один и тот же ClassLoader (хотя это по-моему и не документировано) И ещё вопрос. Почему бы java.awt.Robot не использовать? Зачем вам JMF только для снятия скриншотов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:42:55 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Blazkowicz http://j-integra.intrinsyc.com/support/kb/Article.aspx?id=122967 Не очень понятно это у вас один апплет, или два разных? Если это один апплет, то надо подшаманить HTML, чтобы Java Plug-in идентифицировал апплет и запустил его в старом ClassLoader-е. Если это два разных апплета... Можно ошибку просто поймать и проигнорировать. DLL уже загружена - можно юзать. Можно JVM насильно потушить, если прав хватит. Тогда Java Plug-in её перезапустит. Но это уже грубо. Апплет один и тот же, страница одна и та же. Ошибку можно было бы поймать, если бы библиотека грузилась в моем коде, а не в глубине метода createPlayer(). Я уж его и в singleton люлрачивать пытался - ответ тот же. А как насильно загасить JVM? Прав хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:43:43 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
BlazkowiczАфриканецЭто один и тот же апплет, и страница одна и та же. Как в таком случае подшаманить HTML? Там в статье написано - codebase и archive в объявлении апплета должны совпадать с точностью до символа. http://rsdn.ru/forum/java/1273331.1 Тогда будет один и тот же ClassLoader (хотя это по-моему и не документировано) И ещё вопрос. Почему бы java.awt.Robot не использовать? Зачем вам JMF только для снятия скриншотов? Страница одна и та же. Но первый вызов работает, а второй - нет. Объявления гарантированно совпадают, т.к. страница та же. Я, наверное, недостаточно корректно выразился. Картинка с камеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:45:56 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Тогда странно. classloader_cache в апплете не прописан? Покажите объявление апплета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:49:05 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Ну, и почему бы просто не игнорировать исключение? Ловите UnsatisfiedLinkError , проверяйте если в тексте написано про " already loaded in another classloader", то смело работайте дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:50:21 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Код: html 1. 2. 3. 4. 5. 6. 7. 8. Все подставляемые переменные заполняются в одном и том же методе: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:54:04 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, и почему бы просто не игнорировать исключение? Ловите UnsatisfiedLinkError , проверяйте если в тексте написано про " already loaded in another classloader", то смело работайте дальше. Так оно у меня в методе JMF, который возвращает player. Ну перехвачу я его, а player-то будет null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:55:14 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
Африканец String archive = request.getRequestURL().substring( 0, request.getRequestURL().length() - request.getRequestURI().length()) + request.getContextPath() + "/applets/jmf.jar"; А зачем такие сложности??? Может поэтому у вас и archive разный, когда одна и та же страница открывается по разным URL. Сделайте абсолютный путь тогда "/" + request.getContextPath() + "/applets/jmf.jar"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 18:06:56 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
BlazkowiczАфриканец String archive = request.getRequestURL().substring( 0, request.getRequestURL().length() - request.getRequestURI().length()) + request.getContextPath() + "/applets/jmf.jar"; А зачем такие сложности??? Может поэтому у вас и archive разный, когда одна и та же страница открывается по разным URL. Сделайте абсолютный путь тогда "/" + request.getContextPath() + "/applets/jmf.jar"; Спасибо, попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 18:13:13 |
|
||
|
JMF из апплета: попытка повторной загрузки DLL
|
|||
|---|---|---|---|
|
#18+
BlazkowiczАфриканец String archive = request.getRequestURL().substring( 0, request.getRequestURL().length() - request.getRequestURI().length()) + request.getContextPath() + "/applets/jmf.jar"; А зачем такие сложности??? Может поэтому у вас и archive разный, когда одна и та же страница открывается по разным URL. Сделайте абсолютный путь тогда "/" + request.getContextPath() + "/applets/jmf.jar"; Это не помогло, но помогло переписывание объявления апплета. Вы были правы: CODEBASE должен быть, тогда апплет каждый раз грузится одним и тем же лоадером. Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 10:36:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38077122&tid=2130377]: |
0ms |
get settings: |
18ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
59ms |
get topic data: |
20ms |
get forum data: |
6ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 310ms |
| total: | 537ms |

| 0 / 0 |
