Problema com Applets

4 respostas
augustocolom

Olá pessoal,

Meu Applet funciona normal em meu IDE, porém quando tento abri-lo no navegador da a seguinte mensagem

java.security.AccessControlException: access denied (java.io.FilePermission ./exercicio3/temas read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
	at java.io.File.list(File.java:971)
	at java.io.File.listFiles(File.java:1051)
	at exercicio3.MidiPlayer.getMusicas(MidiPlayer.java:92)
	at exercicio3.MidiPlayer.init(MidiPlayer.java:43)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1579)
	at java.lang.Thread.run(Thread.java:619)
Exception: java.security.AccessControlException: access denied (java.io.FilePermission ./exercicio3/temas read)

Que cai neste método…

/**
	 * Busca músicas dentro do diretório selecionado em categoria
	 * @param categoria
	 * @return
	 */
	private Vector<String>  getMusicas(String categoria){
		File dir = new File("./pasta/"+categoria.toLowerCase());  
		File fList[] = dir.listFiles();
		Vector<String> nomes = new Vector<String>();
		for ( int i = 0; i < fList.length; i++ ){
			nomes.add(fList[i].getName());
		}           
		return nomes;
	}

Será algo referente a permissão de acesso?
Não devo utilizar java.io.File com Applets?

4 Respostas

ViniGodoy

Isso mesmo. Applets não podem acessar arquivos da máquina cliente. É uma restrição de segurança, para que não começam a aparecer applets na net que lê seu HD, ou modifica e deleta arquivos.

Você deve usar um arquivo pelo getResource(), que irá traze-lo do servidor, ou vc assina seu applet e o transforma num applet seguro.

ViniGodoy

Outra coisa. Vector?

Se você não está programando em Java 1.2 (e muita gente faz isso com applets para ser compatível com a MS VM (argh)), então vc deveria usar a classe ArrayList, através da interface List no lugar do Vector. Eis um exemplo:
http://www.guj.com.br/posts/list/74068.java#389435

augustocolom

ViniGodoy:
Isso mesmo. Applets não podem acessar arquivos da máquina cliente. É uma restrição de segurança, para que não começam a aparecer applets na net que lê seu HD, ou modifica e deleta arquivos.

Você deve usar um arquivo pelo getResource(), que irá traze-lo do servidor, ou vc assina seu applet e o transforma num applet seguro.

Opa ViniGodoy, primeiramente obrigado por esclarecer.
Poderia me dizer qual a classe que este é contido.
Em meu caso preciso listar arquivos de um diretório, por isso usei File, saberia dizer se existe algum outro método que faz isso?

augustocolom

ViniGodoy:
Outra coisa. Vector?

Se você não está programando em Java 1.2 (e muita gente faz isso com applets para ser compatível com a MS VM (argh)), então vc deveria usar a classe ArrayList, através da interface List no lugar do Vector. Eis um exemplo:
http://www.guj.com.br/posts/list/74068.java#389435

Ah sim. só estou fazendo um estudo sobre Applets, por isso usei Vector.

Mas valeu pelo alerta

Criado 6 de julho de 2010
Ultima resposta 6 de jul. de 2010
Respostas 4
Participantes 2