aboutsummaryrefslogtreecommitdiff
path: root/files/pt-pt/java_em_extensões_do_firefox/index.html
blob: c6d49cd20f5b6332eef50affd156c9c746000585 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
title: Java em Extensões do Firefox
slug: Java_em_Extensões_do_Firefox
tags:
  - Extensões
  - Java
  - Todas_as_Categorias
---
<p>Se houver a necessidade de chamar código de Java dentro duma <a href="pt/Extens%c3%a3o">extensão</a> do Firefox, o <a class="external" href="http://en.wikipedia.org/wiki/LiveConnect">LiveConnect</a> poderá ser útil. O LiveConnect dá ao código <a href="pt/JavaScript">JavaScript</a> da sua extensão (ligado ou contido no seu código XUL) acesso a dois objectos: <code>java</code> e <code>Packages</code>. Estes dois objectos tornam possível o uso das classes padrão do JDK. Por exemplo:</p>

<pre class="eval">var aJavaList = new java.util.LinkedList();
</pre>

<p>Se quiser carregar os seus próprios JARs, então pode criar a sua classe carregadora Java. Por exemplo:</p>

<pre class="eval">var cl = new java.net.URLClassLoader(
    [ new java.net.URL('<a class="external" href="http://foo.net/bar.jar'" rel="freelink">http://foo.net/bar.jar'</a>) ]
);

var aClass = java.lang.Class.forName("org.mozilla.developer.HelloWorld", true, cl);
var aStaticMethod = aClass.getMethod("getGreeting", []);
var greeting = aStaticMethod.invoke(null, []);
alert(greeting);
</pre>

<p>Esta técnica funciona apenas em código JavaScript ligado dentro de ou contido em ficheiros XUL. Se quiser chamar código Java de dentro de código JavaScript que implementa componentes XPCOM, neste momento só o poderá fazer recorrendo a outra outra técnica (ver <a class="external" href="http://simile.mit.edu/java-firefox-extension/">Java Firefox Extension</a>). Uma boa razão para chamar Java de dentro de um componente XPCOM em vez de XUL é para manter um singleton (tipo de objecto que força a existência de apenas um objecto duma classe )através todas as janelas do Firefox. Se chamar Java pelo XUL então cada janela do Firefox possuirá a sua própria classe e, por consequência, o seu singleton.</p>