Как создать файл из java-апплета?

Я пытаюсь создать файл 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>

person Progress Programmer    schedule 20.10.2011    source источник


Ответы (2)


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

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

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

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

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

person Andrew Thompson    schedule 20.10.2011

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

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

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

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

Moor информация

person Phil Rykoff    schedule 20.10.2011
comment
Класс, который вы создаете, наследует класс Applet :) - person Phil Rykoff; 20.10.2011
comment
Спасибо. Я также пытался вызвать метод апплета для обновления поля, и он работает. В чем разница между созданием файла и обновлением поля в апплете? - person Progress Programmer; 20.10.2011