Erro Applet

e ai pessoal…

tenho uma aplicação desktop que necessitei passá-la para Applet. Rodou direitinho, exceto quando chego na part5e de gerar relatórios. Quando clico no botão que me gera o relatório dá o seuinte erro:


java.security.AccessControlException: access denied (java.io.FilePermission .\Relatorios\Protocolo2.jasper read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkRead(Unknown Source)
	at java.io.File.exists(Unknown Source)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:73)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
	at Imprime.actionPerformed(Imprime.java:69)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

tentei editar o arquivo .policy dessa forma:


/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
/* DO NOT EDIT */

grant {
  permission java.security.AllPermission;
  permission java.io.FilePermission.AllPermission;
};

mas não deu certo…tb tentei assinar a applet…não deu certo

alguém poderia me ajudar a solucionar isso? qualquer idéia é bem-vinda!!!

desde já agradeço a todos.

flws

Onde fica o arquivo .\Relatorios\Protocolo2.jasper? Tá no jar? Tá no site? Tá instalado na máquina do cliente? No seu código está acessando o arquivo assim mesmo (.\Relatorios\Protocolo2.jasper)?

ele fica na pasta Relatórios…eu coloquei dentro e fora do jar…ele está na minha máquina…é dela que estou tentando rodar a applet.

quando eu rodo pelo Eclipse funciona normalmente, mas se eu executo pelo browser dá esse erro ai.

alguma sugestão?

Afinal, está no jar ou não está?

Para testar um applet (e para a gente entender melhor por que não funciona), não use o termo “minha máquina”, pois não sei se você está falando do servidor ou do cliente. O ideal é sempre enviar os .jasper dentro do próprio .jar.

Faça o seguinte:
:arrow: Coloque os .jasper no jar (crie a pasta Relatorios na raiz do jar e coloque os .jasper nele).
:arrow: Para acessar os .jasper use o caminho /Relatorios/blabla.jasper. Lembre-se que é case sensitive e é para usar a “/” e não a “” e não precisa do ". " no inicio.
:arrow: Se você está gerando o .jar pelo Eclipse, certifique-se se foi tudo gerado corretamente (abra o jar e veja se os .jasper estão lá).
:arrow: Assine este .jar e todos os outros que voê usa com este applet.

cara…fiz o que vc disse e msm assim continuar a dar esse maldito erro…

ainda não sei o que pode estar havendo

mto obrigado pela sua ajuda

t+

Tinha um post aqui no GUJ falando sobre um bug de assinar jars se eles já tinham sido assinados anteriormente. Falava para retirar os arquivos de assinatura do arquivo e assinar de novo. Apagar o jar, gerar de novo e assinar também deve funcionar.

amigo,

tentei fazer o que vc me disse mas mesmo assim dá a mesma coisa…

não sei mais o que fazer.

se alguém tiver alguma idéria será muito bem-vinda.

obrigado.

Acho que um applet nao pode acessar arquivos no cliente. Por Seguranca do Java.

java.security.AccessControlException: access denied (java.io.FilePermission .\Relatorios\Protocolo2.jasper read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)

Cara eu acho que nao pode,
mas deve ter uma forma bem Complexa para fazer isso.

                [size=18][u][b]    JAVA NAO TEM LIMITE[/b][/u][/size]

nossa, que m&$%@…

agora ferrou de vez então…

bom, se alguém souber dessa “forma complexa” de se fazer…

vlws

A tal “forma complexa” é assinando o código.
Mas você não colocou os seus .jasper no seu jar? Se colocou, você não está mais acessando o file system da máquina cliente. Poste o stacktrace do erro quando voce envia o seu .jasper dentro do jar. E se possivel poste o seu .jar e a sua pagina html/jsp que chama o codigo.

amigo, o erro eh esse:


java.security.AccessControlException: access denied (java.io.FilePermission Relatorios\Protocolo2.jasper read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkRead(Unknown Source)
	at java.io.File.exists(Unknown Source)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:73)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
	at Imprime.actionPerformed(Imprime.java:69)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

eu estou tentando chamar de uma JApplet.

Obs: pelo eclipse roda td normal.

grato pela ajuda e pela atenção.

java.security.AccessControlException: access denied (java.io.FilePermission Relatorios\Protocolo2.jasper read)

Como você está tentando acessar este arquivo? Você continua colocando a “” ao inves da “/” (em código)? Precisa de uma “/” antes de “Relatorios”.

[quote=evandrosantos]tb tentei assinar a applet…não deu certo
[/quote]

a) Você precisa limpar sempre as applets do cache do browser. Esse cache não é limpo só com Ctrl+F5; você precisa ir ao Painel de Controle, e escolher Java (ou Java Plug-In), e ver onde é que se limpa o cache.
b) Você tem de assinar não só a sua applet, como os JARs que sua applet usa. E se a applet já estiver assinada, você precisa “limpar a assinatura” antes, conforme foi dito antes.
c) Relatórios não são muito bons para serem criados com applets (por conta desses problemas chatos); deveriam ser criados no servidor e baixados.

no código eu passo “/” mas ai no stack ele inverte. Também já tentei colocar a barra antes de “relatorio” mas tb dá o mesmo erro…

[quote]
a) Você precisa limpar sempre as applets do cache do browser. Esse cache não é limpo só com Ctrl+F5; você precisa ir ao Painel de Controle, e escolher Java (ou Java Plug-In), e ver onde é que se limpa o cache.
b) Você tem de assinar não só a sua applet, como os JARs que sua applet usa. E se a applet já estiver assinada, você precisa “limpar a assinatura” antes, conforme foi dito antes.
c) Relatórios não são muito bons para serem criados com applets (por conta desses problemas chatos); deveriam ser criados no servidor e baixados. [/quote]

fiz o que vc disse…limpei o cache e tals…mas o erro persiste.
como assim vc diz que o relatórios “deveria ser baixados do servidor”? vc poderia me dar uma luz de como eu posso fazer isso? talvez seja uma solução paralela para meu problema…

obrigado

?

ola amigo, tudo bem …

voce conseguiu resolver esse problema do acesso ao relatorio .jasper …
pois estou querendo fazer a mesma coisa e até agora nao consegui, da o mesmo erro que voce falou …

obrigado

amigo, o erro persiste pq alguma classe, ou algum .JAR que vc usa junto com sua classe nao está assinado…

Assina tuas classes e teus jars que vai da certo sim…

Use a busca do guj e digite o seguinte: “Assinar applet”

a primeira ocorrência tem a resposta do que vc procura :wink:

E aí, Blz!

Cara, tu conseguiu acessar os teus arquivos .jasper que estão dentro do .jar da tua aplicação via JWS?

Estou tentando isso a um tempo e não estou conseguindo, se alguém puder ajudar!

Valeu!