Это будет большой беспорядок, чтобы объяснить, но если у кого-то есть указатель, пожалуйста, поделитесь!
Из апплета, который я вызываю, библиотеку третьей четности, которая использует JNI, получает некоторую информацию в ОСконкретным образом.Я не знаю, что он вызывает, так как у меня нет кода и поддержка не очень отзывчива.Дело в том, что все хорошо работает в Windows (не только на моей машине), но и в Mac OS. Один из методов lib генерирует исключение, специфичное для lib (код и сообщение «Cannot complete» ~).Кажется, это проблема, связанная с безопасностью, поскольку метод работает, когда я вызываю его из init ().
JAR-файл с моим апплетом самоподписан, в библиотеке есть еще 4 JAR-файлов, подписанных поставщиком.,Метод lib вызывается из блока «AccessController.doPrivileged» как метод апплета, который вызывается из JavaScript - и все это работает, но только для окон.
В Mac это вызов из JavaScript в метод апплетакоторый вызывает метод библиотеки lib, получает исключение.
Вот что я попробовал:
Я переместил вызов метода библиотеки lib в init () только для теста, и он работает нормально, только без блока «AccessController.doPrivileged».Я попытался запустить поток в init () (а также в start ()): - используя таймер, чтобы поток вызывал метод lib каждые 10 секунд, он работает нормально, и я могу получить обновленный ответ через буфер строк - это не такпредпочтительное решение.- но если я использую флаг в потоке, чтобы метод апплета мог вернуть результат, он выдает то же исключение.
Вот код в методе моего апплета:
checkRunner.refreshWindowsList = true;
while (checkRunner.refreshWindowsList) {
try {
Thread.sleep(300);
} catch (Exception ex) {
System.out.println("Ignoring exception: " + ex.getMessage());
}
}
return checkRunner.windowsTitles;
ив методе выполнения Thread:
try {
while (true) {
if (refreshWindowsList) {
windowsTitles = getWindowsTitlesPrivileged();
//windowsTitles = getWindowsTitles();
refreshWindowsList = false;
}
Thread.sleep(300);
}
} catch (Exception ex) {
System.out.println("Ignoring exception: " + ex.getMessage());
}
Я не понимаю, как простая передача флага может привести к различным результатам.
Кроме того, кажется, что когда апплет создан из кода JavaScriptвсе это помещается в «песочницу», а метод lib выдает исключение даже из init () ... опять же только в Mac OS.
Если кто-то сделал это так далеко - Спасибо:)