Applet + JavaScript

3 respostas
roqmarcelo

Olá pessoal,

Estou tentando acessar o método de um Applet via JavaScript, e até já consegui. Porém estou utilizando uma api de VoIP e preciso efetuar uma chamada, mas quando meu Applet chama o método via JavaScript eu estou recebendo um NullPointerException no browser. Isso só acontece quando chamo o método via javascript, mas quando executo no eclipse funciona perfeitamente.

Minha página HTML

<html>
	<head>
		<script type="text/javascript">
			function chamar() {
				var userpart = document.getElementById("userpart").value;
				var domain = document.getElementById("domain").value;
				var port = document.getElementById("port").value;
				var result;
				try {
					result = document.SipApplet.call(userpart, domain, port);
				} catch (err) {
					result = err;
				}
				document.getElementById("result").innerHTML = result;
			}
		</script>
	</head>
	<body>
		<applet name="SipApplet" code=SipApplet.class width="100" height="100">
		</applet>
		
		<br />
		
		Ramal: <input type="text" id="userpart" name="userpart" /> <br />
		Servidor: <input type="text" id="domain" name="domain" /> <br />
		Porta: <input type="text" id="port" name="port" /> <br />
		<input type="button" id="btn_chamar" value="Chamar" onclick="chamar();" /><br />
		<br />
		<div id="result"></div>
	</body>
</html>

Meu Applet

import java.applet.Applet;

import net.sourceforge.peers.AppletManager;

@SuppressWarnings("serial")
public class SipApplet extends Applet {
	
	public String call(String userpart, String domain, String port) {
		return AppletManager.getInstance().call(userpart, domain, port);
	}
}

E o AppletManager que chama as funções para efetuar a chamada.

import java.net.SocketException;

import net.sourceforge.peers.sip.Utils;
import net.sourceforge.peers.sip.core.useragent.SipListener;
import net.sourceforge.peers.sip.core.useragent.UserAgent;
import net.sourceforge.peers.sip.syntaxencoding.SipUriSyntaxException;
import net.sourceforge.peers.sip.transport.SipRequest;
import net.sourceforge.peers.sip.transport.SipResponse;

public class AppletManager implements SipListener {
	
	private static AppletManager instance;
	
	private UserAgent userAgent;
	
	private AppletManager() {
		try {
			userAgent = new UserAgent(this, Utils.DEFAULT_PEERS_HOME, new Logger(Utils.DEFAULT_PEERS_HOME));
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}
	
	public static AppletManager getInstance() {
		if (instance == null) {
			instance = new AppletManager();
		}
		return instance;
	}
	
	public String call(String userpart, String domain, String port) {
		String callId = Utils.generateCallID(userAgent.getConfig().getLocalInetAddress());
		StringBuffer uri = new StringBuffer();
		uri.append("sip:");
		uri.append(userpart);
		uri.append("@");
		if (domain == null || domain.isEmpty()) {
			domain = userAgent.getConfig().getDomain();
		}
		uri.append(domain);
		if (port != null && !port.isEmpty()) {
			uri.append(":");
			uri.append(port);
		}
		
		String result;
		
		try {
			SipRequest sipRequest = userAgent.getUac().invite(uri.toString(), callId);
			result = sipRequest.toString();
		} catch (SipUriSyntaxException e) {
			result = e.getLocalizedMessage();
			e.printStackTrace();
		} catch (Exception e) {
			result = e.getLocalizedMessage();
			e.printStackTrace();
		}
		
		return result;
	}
}

Obrigado.

3 Respostas

roqmarcelo

Consegui este StackTrace

java.lang.NullPointerException at net.sourceforge.peers.AppletManager.call(AppletManager.java:54) 
at SipApplet$1.run(SipApplet.java:27) 
at SipApplet$1.run(SipApplet.java:1) 
at java.security.AccessController.doPrivileged(Native Method) 
at SipApplet.call(SipApplet.java:23) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source) 
at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source) 
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source) 
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source) 
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source) 
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source) 
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source) 
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source)
A

Se vc tentasse colocar o nome do pacote tb não daria certo?

<applet name="SipApplet" code=[b]pacote.[/b]SipApplet.class width="100" height="100">

roqmarcelo

Não é o problema…ele está chamando o Applet, mas descobri que o problema é a permissão para acessar a rede. Agora estou tentando dar todas as permissões ao Applet. Tentei usando AccesController.doPrivileged, mas eu teria que chamar em cada método que faz acesso à rede, então terei que verificar como fazer isso no arquivo java.policy.

Criado 13 de março de 2012
Ultima resposta 14 de mar. de 2012
Respostas 3
Participantes 2