Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JMF из апплета: попытка повторной загрузки DLL / 13 сообщений из 13, страница 1 из 1
12.12.2012, 17:24:30
    #38076206
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
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.
		devices = CaptureDeviceManager.getDeviceList(null);
		for (Iterator i = devices.iterator(); i.hasNext();) {
			deviceInfo = (CaptureDeviceInfo) i.next();
			if (deviceInfo.getName().startsWith("vfw:")) {
				System.out.println((new StringBuilder(
						"Capture Device Info>>>>>>>>>>>>>>")).append(
						deviceInfo.getName()).toString());
				break;
			}
		}

		try {
			System.out.println("About to create player...");
			player = Manager.createRealizedPlayer(deviceInfo.getLocator());
			System.out.println("Player created!");
			player.start();
			System.out.println("Player started!");
		} catch (NoPlayerException npe) {
			npe.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (CannotRealizeException e) {
			e.printStackTrace();
		}
		imageWebcamLabel.add(player.getVisualComponent());
		frameGrabber = (FrameGrabbingControl) player
				.getControl("javax.media.control.FrameGrabbingControl");

		Buffer buf = frameGrabber.grabFrame();
		Image img = (new BufferToImage((RGBFormat) buf.getFormat()))
				.createImage(buf);
...
Рейтинг: 0 / 0
12.12.2012, 17:31:04
    #38076222
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
http://j-integra.intrinsyc.com/support/kb/Article.aspx?id=122967
Не очень понятно это у вас один апплет, или два разных?
Если это один апплет, то надо подшаманить HTML, чтобы Java Plug-in идентифицировал апплет и запустил его в старом ClassLoader-е.
Если это два разных апплета... Можно ошибку просто поймать и проигнорировать. DLL уже загружена - можно юзать.
Можно JVM насильно потушить, если прав хватит. Тогда Java Plug-in её перезапустит. Но это уже грубо.
...
Рейтинг: 0 / 0
12.12.2012, 17:39:17
    #38076243
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
Blazkowicz,

Это один и тот же апплет, и страница одна и та же.

Как в таком случае подшаманить HTML?
...
Рейтинг: 0 / 0
12.12.2012, 17:42:55
    #38076251
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
АфриканецЭто один и тот же апплет, и страница одна и та же.
Как в таком случае подшаманить HTML?
Там в статье написано - codebase и archive в объявлении апплета должны совпадать с точностью до символа.
http://rsdn.ru/forum/java/1273331.1
Тогда будет один и тот же ClassLoader (хотя это по-моему и не документировано)

И ещё вопрос. Почему бы java.awt.Robot не использовать? Зачем вам JMF только для снятия скриншотов?
...
Рейтинг: 0 / 0
12.12.2012, 17:43:43
    #38076253
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
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? Прав хватит.
...
Рейтинг: 0 / 0
12.12.2012, 17:45:56
    #38076257
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
BlazkowiczАфриканецЭто один и тот же апплет, и страница одна и та же.
Как в таком случае подшаманить HTML?
Там в статье написано - codebase и archive в объявлении апплета должны совпадать с точностью до символа.
http://rsdn.ru/forum/java/1273331.1
Тогда будет один и тот же ClassLoader (хотя это по-моему и не документировано)

И ещё вопрос. Почему бы java.awt.Robot не использовать? Зачем вам JMF только для снятия скриншотов?

Страница одна и та же. Но первый вызов работает, а второй - нет. Объявления гарантированно совпадают, т.к. страница та же.

Я, наверное, недостаточно корректно выразился. Картинка с камеры.
...
Рейтинг: 0 / 0
12.12.2012, 17:49:05
    #38076271
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
Тогда странно. classloader_cache в апплете не прописан? Покажите объявление апплета.
...
Рейтинг: 0 / 0
12.12.2012, 17:50:21
    #38076276
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
Ну, и почему бы просто не игнорировать исключение? Ловите UnsatisfiedLinkError , проверяйте если в тексте написано про " already loaded in another classloader", то смело работайте дальше.
...
Рейтинг: 0 / 0
12.12.2012, 17:54:04
    #38076285
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
Blazkowicz,

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
<applet code="com.etc.pbs.gk.web.move.ImageCaptureApplet"
	archive="<%=archive%>"
	alt="Applet is NOT loaded! Please contact technical support"
	width="720" height="620">
	<param name="webPictureField" value="webPicture" />
	<param name="urlToSubmit" value="<%=urlToSubmit%>" />
	<param name="urlToRedirect" value="<%=urlToRedirect%>" />
</applet>



Все подставляемые переменные заполняются в одном и том же методе:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
				String archive = request.getRequestURL().substring(
						0,
						request.getRequestURL().length()
								- request.getRequestURI().length())
						+ request.getContextPath() + "/applets/jmf.jar";

				String urlToSubmit = request.getRequestURL().substring(
						0,
						request.getRequestURL().length()
								- request.getRequestURI().length())
						+ request.getContextPath()
						+ "/pages/login/switchTo.do?prefix=/pages/move&page=/imageAppletParamsProcess.do";
...
Рейтинг: 0 / 0
12.12.2012, 17:55:14
    #38076289
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
BlazkowiczНу, и почему бы просто не игнорировать исключение? Ловите UnsatisfiedLinkError , проверяйте если в тексте написано про " already loaded in another classloader", то смело работайте дальше.

Так оно у меня в методе JMF, который возвращает player. Ну перехвачу я его, а player-то будет null.
...
Рейтинг: 0 / 0
12.12.2012, 18:06:56
    #38076318
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
Африканец String archive = request.getRequestURL().substring(
0,
request.getRequestURL().length()
- request.getRequestURI().length())
+ request.getContextPath() + "/applets/jmf.jar";

А зачем такие сложности??? Может поэтому у вас и archive разный, когда одна и та же страница открывается по разным URL.
Сделайте абсолютный путь тогда
"/" + request.getContextPath() + "/applets/jmf.jar";
...
Рейтинг: 0 / 0
12.12.2012, 18:13:13
    #38076331
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
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";

Спасибо, попробую.
...
Рейтинг: 0 / 0
13.12.2012, 10:36:25
    #38077122
Африканец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JMF из апплета: попытка повторной загрузки DLL
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.
<applet code="com.etc.pbs.gk.web.move.ImageCaptureApplet"
	codebase="/gk2web/applets"
	archive="jmf.jar"
	alt="Applet is NOT loaded! Please contact technical support"
	width="720" height="620">
	<param name="webPictureField" value="webPicture" />
	<param name="urlToSubmit" value="<%=urlToSubmit%>" />
	<param name="urlToRedirect" value="<%=urlToRedirect%>" />
</applet>
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JMF из апплета: попытка повторной загрузки DLL / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]