Applet trava quando tem contadores de tempo

2 respostas
V

Olá pessoal,

eu criei uma DLL que faz um teste de hibernação na máquina. Quando eu rodo o teste em um programinha Java simples, ele funciona normal. A máquina hiberna e volta depois de 70 segundos (eu configurei esse tempo).
Agora eu preciso rodar esse teste em um navegador. Estou usando um Applet e quando a máquina volta da hibernação o applet está travado, e eu preciso matar o processo do navegador.

Eu achei esse bug, não sei se é a mesma coisa. De qualquer forma, eles disseram que foi resolvido. E eu estou usando a versao 1.6.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916767

Quem puder me ajudar, eu agradeço.

Esse é meu código:

public class AppletExecutora extends Applet {

	
	// 
	private String mensagem;
	

	// conectores para uso da dll
	private ConectorTesteAcpi conectorAcpi;
	
	// botoes que acionam os testes
	private Button botaoAcpi;

	/**
	 * 
	 */
	public void init() {
		mensagem = "";
		// copiar arquivos .dll para o diretorio windows.system32.
		copiarBibliotecas("acpi.dll");
		
		// inicia conector para a biblioteca .dll
		conectorAcpi = new ConectorTesteAcpi();

		//inicia botoes				
		botaoAcpi = new Button("Teste Acpi");
		botaoAcpi.setVisible(true);
		criarEventoTesteAcpi();
		add(botaoAcpi);		
		
	}
	
		
	private void criarEventoTesteAcpi() {
		ActionListener tratarEvento = new ActionListener(){			
			public void actionPerformed(ActionEvent e) {
				getAppletContext().showStatus("Testando Acpi...");	
				conectorAcpi.testarAcpi(70);
				int resultadoTeste = conectorAcpi.getResultadoTeste();
				if (resultadoTeste == ConectorTesteAcpi.FALHA){
					exibirMensagem("FALHA NO TESTE DA ACPI.");
				}else{
					exibirMensagem("TESTE DA ACPI FINALIZADO COM SUCESSO.");
				}
				getAppletContext().showStatus("Concluído");
			}			
		};	
		botaoAcpi.addActionListener(tratarEvento);
	}

	public void copiarBibliotecas(String arquivo) {
		try {
			InputStream sOrigem = this.getClass().getResourceAsStream("/lib/"+arquivo);
			File destino = new File("/WINDOWS/System32/"+arquivo);
			destino.createNewFile();
			OutputStream sDestino = new FileOutputStream(destino);
			byte[] buf = new byte[1024];
			int len;
			while ((len = sOrigem.read(buf)) > 0) {
				sDestino.write(buf, 0, len);
			}
			sOrigem.close();
			sDestino.close();
		} catch (Exception except) {
			exibirMensagem(except.getMessage());
		}		
	}

	/**
	 * 
	 */
	public void start() {
		exibirMensagem("Escolha o teste a ser realizado...");
	}

	/**
	 * 
	 */
	public void stop() {
		exibirMensagem("Interrompendo o executor do teste... ");
	}

	/**
	 * 
	 */
	public void destroy() {
		exibirMensagem("Finalizando o executor do teste...");
	}

	/**
	 *  
	 */
	void exibirMensagem(String mensagem) {
		this.mensagem = mensagem;
		invalidate();
		repaint();
	}	
	

	/**
	 * 
	 */
	public void paint(Graphics g) {
		g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);		
		g.drawString(mensagem, 5, getHeight()/2);
	}

}

2 Respostas

letakeda

Nao faço a menor idéia mas… gostei da classe.

V

Pessoal,

parece que o problema é por causa do contador que tenho na dll.
Tenho um contador de 70 segundos, para que o pc ligue de volta depois de hibernar.
Eu testei sem hibernar, so colocando o contador e o applet travou mesmo assim.

Alguem sabe se tem alguma incompatibilidade do applet com contadores de tempo?

att,
Vanessa

Criado 28 de novembro de 2008
Ultima resposta 1 de dez. de 2008
Respostas 2
Participantes 2