Como criar um arquivo a partir de um miniaplicativo java?
-
27-10-2019 - |
Pergunta
Estou tentando criar um arquivo do Excel e salvá-lo no sistema de arquivos local usando o miniaplicativo java.Depois de assinar o aplicativo, posso criar o arquivo com êxito invocando diretamente o miniaplicativo.No entanto, quando tento chamar o método de javascript, ele falhou sem nenhuma mensagem de erro.Estou me perguntando se existe algum controle de política para evitar que o método java seja chamado de 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>
Solução
Os métodos em um miniaplicativo confiável que são chamados usando JavaScript precisam ser agrupados em um PrivilegedAction
e chamado usando um dos AccessController.doPrivileged(..)
.
Acesso ao sistema de arquivos em sandbox
Plug-in 2 JREs (Oracle 1.6.0_10 + JRE, por exemplo) oferecem acesso em sandbox ao sistema de arquivos local usando o JNLP API serviços de arquivo (especificamente os FileSaveService
). Consulte a demonstração do serviço de arquivo. para obter um exemplo.
Elemento miniaplicativo
Um applet chamado por JS deve declarar que é scriptable
no HTML. Quanto a obter esse 'HTML', a melhor maneira de escrevê-lo é usando o deployJava.js . Ele não apenas gravará o elemento do miniaplicativo da melhor maneira conhecida atualmente para cada navegador, mas também a presença do JRE (o Java está instalado?) E a versão mínima (o JRE é a versão mínima necessária para executar este miniaplicativo?) Verificando.
Outras dicas
Pode haver vários problemas aqui.
1) Você deve usar o método de implantação JavaScript para o miniaplicativo (consulte o link).
2) Se o método que você tenta invocar não estiver no próprio miniaplicativo-filho, primeiro você deve obter uma instância da classe em questão e, em seguida, invocar seu método, por exemplo,(para a classe Calculadora):
var calculator = mathApplet.getCalculator();
calculator.setNums(numA, numB);
Moor informações