Applet Java

4 respostas
C

Bom dia pessoal,

Sou novo em java, e estou tentando fazer funcionar um applet que fiz no navegador, mas esta dando erro e na faco ideia por que esta gerando isso :frowning:

Eu preciso pegar o mac address do usuario que estiver acessando o “site” que é um sistema onde preciso fazer uma verificacao de maquina para efetuar o login.

Achei a funcao e ela compila certinho no eclipse, mas quando uso o .class no html nao funciona :frowning:

Alguem pode me ajudar?

<applet code="getMac.class" width="402" height="147"></applet>

import java.io.*;
import java.util.regex.*;  
import java.applet.Applet;

public class getMac {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {
		String address = new getMac().getMacAddress();
		System.out.println(address);
	}

	public String getMacAddress() throws IOException {
		String macAddress = null;
		String command = "ipconfig /all";
		Process pid = Runtime.getRuntime().exec(command);
		BufferedReader in = new BufferedReader( new InputStreamReader(pid.getInputStream()));
		while (true) {
			String line = in.readLine();
			if (line == null)
			break;
			Pattern p = Pattern.compile(".*Physical Address.*: (.*)");
			Matcher m = p.matcher(line);
			if (m.matches()) {
				macAddress = m.group(1);
				break;
			}
		}
		in.close();
		return macAddress;
	}

}

4 Respostas

G

bom, eu não vejo nenhum problema mas sei la pode ser o null do mcadress

E
Runtime.getRuntime().exec(command);

Isso não pode ser executado em uma applet, a menos que ela seja assinada.

C

Hum, pode me ajudar com uma luz,
como fazer funcionar ? Desculpa mais não entendi o assinada, certificado digital ? esse aplicativo vai rodar em um sistema que esta em https://

al.barbosa

celo surf,

Para criar um applet você precisa estender a classe Applet ou JApplet. Pode implementar o método init() para inicializar o applet.

Criei o applet parecido com o que você quer abaixo. Consegui executar e obter o endereço físico no console. Consegui executar também como applet no browser. Está dando uma exception que aparece na JLabel (coloquei para jogar a classe da Exception e a mensagem na JLabel, dentro do catch).

import javax.swing.*;
import java.io.*;
import java.util.regex.*;    

public class AppletMac extends JApplet {
	public static void main(String args[]) {
		System.out.println(new AppletMac().mostraMac());
	}
	 
	public void init() {
		JLabel jl = new JLabel(mostraMac());
		JPanel pn = new JPanel();
		pn.add(jl);
		setContentPane(pn);
	}
	  
	public String mostraMac(){
		String result;
		try{
			result = getMacAddress();
			if(result == null) 
				result = "endereço nulo";
		}catch(Exception e){
			result = e.getClass().toString() + " - " + e.getMessage();
		}
		return result;
	}	

    public String getMacAddress() throws IOException {  
        String macAddress = null;  
        String command = "ipconfig /all";  
        Process pid = Runtime.getRuntime().exec(command);  
        BufferedReader in = new BufferedReader( new InputStreamReader(pid.getInputStream()));
 
        while (true) {  
            String line = in.readLine();  
            if (line == null)  
            break; 
            Pattern p = Pattern.compile(".*Endereço físico.*: (.*)");  
            Matcher m = p.matcher(line);  
            if (m.matches()) {  
                macAddress = m.group(1);  
                break;  
            }  
        }  
        in.close();  
        return macAddress;  

    } 
}

Eu coloquei o Pattern.compile(".*Endereço físico.*: (.*)"); porque no meu computador o ipconfig /all retorna em português (você tinha colocado Physical Address). Em outro computador que testei ele retorna Endereço Físico (Físico começando em maiúscula) e não reconhece o acento.
Acho que esse é um problema que você terá que ver, porque se você rodar o applet na Internet cada computador pode retornar o ipconfig de uma forma diferente, e se não for Windows talvez nem tenha ipconfig.

O erro que dá quando executo o applet no browser é da classe java.security.AccessControlException. A mensagem é access denied (java.io.FilePermission <> execute).
O que está parecendo é que o applet não tem permissão para executar comandos de IO. Mas não sei como fazer para dar essa permissão. Pode ser que seja o problema do applet ser assinado, como disse o entanglement.

Criado 7 de junho de 2012
Ultima resposta 14 de jun. de 2012
Respostas 4
Participantes 4