Как создать файл из Java-апплета? - PullRequest
1 голос
/ 20 октября 2011

Я пытаюсь создать файл Excel и сохранить его в локальной файловой системе с помощью Java-апплета.После подписания приложения я могу успешно создать файл, напрямую вызвав апплет.Тем не менее, когда я пытаюсь вызвать метод из JavaScript, это не удалось без каких-либо сообщений об ошибках.Мне интересно, есть ли какой-либо элемент управления политикой для предотвращения вызова метода java из javascript?

 <html>
<script language="JavaScript">
function createExcel()
{
    document.excel.createExcel();

    document.excel.setMessage("hello world from js");
}
</script>
<body>
<input type="button" value="Generate Excel" onclick="createExcel()" />
<applet id='applet' name='excel' archive='Office.jar,poi-3.7-20101029.jar' code='com.broadridge.Office.class' width='100' height='100'></applet>
</body>
</html>

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Методы в доверенном апплете, которые вызываются с помощью JavaScript, должны быть заключены в PrivilegedAction и вызываться с использованием одного из AccessController.doPrivileged(..) вариантов.

Доступ к изолированной файловой системе в изолированной среде

Плагин 2 JRE (например, Oracle 1.6.0_10 + JRE) предлагает изолированную доступ к локальной файловой системе с использованием файловых служб JNLP API (в частностиFileSaveService).См. Пример демонстрационной файловой службы . .

Элемент апплета

Апплет, вызываемый JS, должен объявить, что в HTML он равен scriptable.Что касается получения этого «HTML», лучший способ написать его - использовать Oracle deployJava.js .Он не только напишет элемент applet лучшим способом, который в настоящее время известен для каждого браузера, но также проверяет наличие JRE (установлена ​​ли Java?) И минимальную версию (является ли JRE минимальной версией, необходимой для запуска этого апплета?).

1 голос
/ 20 октября 2011

Здесь может быть несколько проблем.

1) Вы должны использовать метод развертывания JavaScript для апплета (см. Ссылку).

2) Если метод, который вы пытаетесь вызвать,не в самом applet-child, вы сначала должны получить экземпляр рассматриваемого класса, а затем вызвать его метод, например (для класса Calculator):

var calculator = mathApplet.getCalculator();
calculator.setNums(numA, numB);

Moor info

...