Você está na página 1de 32

Desenvolvimento em Java

para Desktops Livres

Fernando Lozano
http://www.lozano.eti.br
Consultor Independente
Prof. Faculdades UniABEU
Prof. SENAC
Editor Adjunto da Revista Java Magazine

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 1
Sobre o Autor
● Red Hat Certified Engineer
LPI Certified Professional Level I
Sair GNU/Linux Certified Professional
● IBM Certified Network Engineer
IBM Certified DB2 Administrator &
Developer
● Microsoft Certified Systems Engineer
Microsoft Certified Solutions Developer
● Webmaster da Free Software Foundation
● Conselheiro do LPI Brasil
● Editor Adjunto da Revista Java Magazine
● Autor do Livro "Java em GNU/Linux"
Ed. Alta Books www.altabooks.com.br

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 2
Agenda

● Java no Desktop
● JVMs Alternativas
● Integração ao Gnome/KDE
● Bibliotecas gráficas Livres
● IDEs e outras ferramentas

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 3
Java no Desktop

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 4
Desenvolvimento GUI em
Java
● O Java original fornecia a biblioteca AWT, que
oferecia uma abordagem de “menor denominador
comum” das plataformas gráficas suportadas
(Motif, Windows e MacOS)
● O Java2 padronizou a biblioteca Swing, que
implementava todos os controles visuais em Java,
utilizando apenas as primitivas gráficas da
plataforma
● Apesar de recursos avançados, como arquitetura
MVC e pluggable Look-And-Feel modules, o Swing
não emplacou no desktop

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 5
O Java É Rico o Suficiente?

● No Java original faltavam recursos para drag and


drop, acessibilidade e multimídia
● Todos são padrão no Java2, em nível de recursos
comparáveis (ou superiores) com toolkits gráficos
nativos
● O Java2 ainda inclui APIs padronizadas para
recursos avançados como OpenGL
● APIs mais recentes fornecem suporte a
dispositivos como Joysticks

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 6
Problemas do Swing

● Problemas gerais:
● Lentidão, quando comparado com os componentes
nativos equivalentes
● Aparência estranha, não segue os temas da área de
trabalho (apesar do LAF “GTK nativo”)
● Problemas específicos nos desktops livres:
● Digitação de acentos e símbolos
● Copiar e colar com outras aplicações
● Aspecto dos fontes
● Internacionalização

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 7
Problemas da Especificação
ou da Implementação?
● O Java da Sun utiliza AWT Peers baseados no
Motif, enquanto que os desktops livres são
baseados no GTK ou no Qt e extensões do X11
como o Xft
● O Swing utiliza as primitivas gráficas e recursos
(fontes, ícones) conforme fornecidos pelo AWT
● O X11 não define aspectos como formatos da área
de transferência nem anti-aliasing de fontes
● Implementações alternativas podem implementar
AWT Peers baseados no GTK, por exemplo, o que
já resolve os problemas relacionados com fontes,
digitação e área de transferência
© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 8
LAFs São a Solução?

● Nas plataformas Windows e Mac, o uso de “LAFs


nativos” tem tornado a experiência do usuário
bem mais agradável
● No Mac, a Apple modificou a JVM e o Swing para
obter melhor integração com o Acqua
● Apesar do Java Desktop System (que é uma
distribuição do Linux baseada no Gnome), o LAF
GTK ainda está longe de ser viável
● Não existe ainda nenhum LAF de terceiros que
suporte adequadamente Gnome ou KDE; mas
vários deles são bem melhores do que o “Metal”

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 9
JMVs Alternativas

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 10
Questões de Licença

● A licença do Java2 da Sun impede sua distribuição


irrestrita, como ocorre em distribuições gratuitas
do Linux
● Lembre que várias distribuições fornecem como
padrão softwares proprietários como o antigo
Netscape 4, o Acrobat Reader ou drivers para
Winmodens
● Apenas versões “enterprise” das distribuições
(pagas por computador ou usuário) podem
incorporar o Java da IBM, o da Sun ou o JRockit
(BEA)

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 11
JVMs e JDKs Alternativos

● Kaffe
O mais antigo, ficou parado por longo tempo mas está
novamente ativo
● GCJ
O que mais tem evoluído, com o diferencial da
compilação nativa
● SableVM, JAM
Fornecem apenas JVMs, utilizando as APIs desenvolvidas
pelo projeto Classpath
● Jikes
É apenas um compilador Java, frequentemente utilizado
em lugar do fornecido com o Java2 SDK

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 12
Compatibilidade com o Java2

● As alternativas citadas tem o Java 1.1 quase


completo, além de porções significativas do Java2
● A prova é a possibilidade de rodar aplicações Java
complexas, como o Tomcat ou o Xerces
● O Swing é o grande elemento faltante nas
implementações livre da JVM
● O Projeto Classpath tem feito progressos no suporte
ao AWT e ao Swing
● O Kaffe suporta o AWT (via GTK+ ou Qt peers) e roda
o Swing 1.1.1 (Java 1.1.x)

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 13
J2SD ou J2ME

● No mundo embarcado, a Sun define JVMs e APIs


diferenciadas, o Java2 Micro Edition (J2ME)
● JVMs livres poderiam ser customizadas para uso
embarcado, fornecendo mais recursos – esse era o
foco da empresa que patrocinou o
desenvolvimento do Kaffe original
● A compilação cruzada, realizada pelo GCJ, é uma
alternativa interessante, ao não requerer uma JVM
● O SuperWaba, apesar de não seguir as
especificações do J2ME, vem sendo adotado por
várias empresas

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 14
Integração ao Gnome/KDE

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 15
O Desktop Livre

● O projeto FreeDesktop organiza esforços de


padronização para componentes não cobertos
pelo X11
● Fontes, ícones da área de trabalho, associação de
arquivos, etc
● Seus padrões vem sendo adotados não só pelos
“big players” Gnome e KDE, mas também por
ambientes como o Xfce, GPE e OPIE (PDAs)
● É claro, padrões como o LSB (Linux Standards
Base) simplificam o processo de instalação

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 16
Pacotes Java

● A falta de JVMs como padrão nas distribuições do


Linux complica a tarefa de geração de pacotes
RPM / Deb / etc para fácil instalação
● O projeto JPackage.org tem contribuído, mas fica
o problema da licença da Sun
● Padrão RPM: noarch, ocasionalmente nosrc
● Os desenvolvedores Java deveriam dar mais
atenção ao uso de JVMs alternativas

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 17
Dicas

● Empacote em RPM ou Deb


● Forneça arquivos de configuração de desktop e
MIME
● Utilize a linha de comando (para abrir arquivos)
● Experimente com LAFs “temáveis” como o SkinLF
● Um wrapper script (em shell) é mais flexível do
que um JAR executável
● Utilize APIs padrão mais recentes, como a
Preferences

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 18
Alternativas ao Swing

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 19
Alternativas ao Swing

● SWT
● Biblioteca gráfica definida em Java mas
implementada com componentes nativos, sempre
que possível
● Base do popular IDE Eclipse
● Portado para Windows, Mac, Unix, QNX e PocketPC
● Versões baseadas em Motif ou GTK
● Não suporta recursos avançados do desktop, como
applets de painel

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 20
Alternativas ao Swing

● Java-Gnome
● Fornece bindings do GTK, Pango, Libglade e outras
APIs do Gnome para a linguagem Java
● Ainda não foi portado para SOs não-Unix, apesar do
GTK rodar com sucesso em Mac, Windows e OS/2
● Processo de compilação ainda exige um Java2 SDK
tradicional – é um bug, pois seria possível fazer tudo
com o GCJ ou Kaffe!
● Segue o mesmo estilo dos bindings do GTK para
C/C++, Pascal, Python, Perl, PHP, ...
● Suporte em progresso para applets do painel e
Bonobo

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 21
Hello, Word Java com GTK+

● import gnu.gdk.*;
import gnu.gtk.*;

class GtkOi
{
public static void main(String[] args) {

Gtk.init(args.length, args);
GtkWindow win = new GtkWindow(GtkWindowType.TOPLEVEL);
win.setTitle("Teste do GTK+");
win.signalConnect("destroy", "mainQuit", Gtk.class);
GtkLabel lbl = new GtkLabel(
"Aplicativo GTK+ escrito em Java!");
lbl.setPadding(10, 10);
win.add(lbl);
win.showAll();
Gtk.main();
}
}

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 22
Vantagem das Alternativas

● Melhor suporte a JVMs alternativas, em especial o


GCJ
● Fim dos problemas com a licença da Sun
● Aderência ao tema da área de trabalho (Gnome)
● Comportamento de teclado e área de
transferência consistente com o restante do
desktop
● Performance comparável aos toolkits nativos
● Menor demanda de memória
● Integração com o Mozilla

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 23
Desvantagens das
Alternativas
● Portabilidade ainda reduzida em comparação com
o Swing (será verdade, em relação ao SWT?)
● Os IDEs Java são focados no Swing, não suportam
desenvolvimento visual com as alternativas
● Componentes de terceiros também são focados
no Swing
● Incompatibilidade com APIs Java avançadas, como
Java2D e Imaging API
(note que não há incompatibilidade com APIs
como o Java Activation Framework ou Javaspeech)

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 24
O Híbrido: SwingWT

● Implementa a API do Swing utilizando os


componentes (nativos) do SWT
Swing + SWT = SwingWT
● O GCJ “this is cool” vem utilizando o SwingWT para
conseguir compatibilidade com o Swing
● Potencial violação da licença do Java da Sun
● Mudar as referências a pacotes de:
● java.awt para swingwt.awt
● javax.swing para swingwtx.swing

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 25
IDEs e Outras Ferramentas

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 26
IDEs Visuais Java Livres

● O tradicional NetBeans era mal visto por causa do


Swing e do seu estilo “antiquado” de interface,
mas a versão 3.6 vale uma reavaliação
● O Eclipse não dispunha de recursos visuais, mas
no final de 2003 foi liberada a primeira versão do
VE (Visual Editor), que hoje suporta apenas Swing,
mas na versão 1.0 irá suportar também SWT
● IDEs não-visuais, como o Emacs ou Anjuta, são
alternativas interessantes – como demonstrado
pelo sucesso do Eclipse não-visual

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 27
Ferramentas Visuais para
Java com GTK ou SWT
● IDEs visuais para Java são escritos para o AWT ou
para o Swing, e não suportam o GTK ou AWT.
● Projetos abertos como o Eclipse ou o NetBeans
podem vir a suportar o GTK no futuro, se houver
interesse da comunidade.
● O Eclipse já fornece plug-ins para
desenvolvimento visual SWT
● Os bindings do GTK para Java incluem a LibGlade,
de modo que o Glade pode ser utilizado para
desenhar a interface gráfica de aplicativos Java
com GTK

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 28
Uma Amostra das
Ferramentas Disponíveis
● ArgoUML – case UML completo, com suporte a
Java, PHP e C# (extensões de terceiros para SQL e
EJBs)
● Mogwai – Diagramas E/R
● iReports – desenhador visual de relatórios,
geração de PDF, RTF, HTML e XLS via
JasperReports
● Flow4J – plug-in do Eclipse para geração de
código à partir de fluxogramas
(útil para complexos fluxos de negócios ou IU)
● JSwat – depurador visual em Java

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 29
FIM

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 30
Referências

● www.javasoft.com
● linux.java.net
● www.freedesktop.org
● gcc.gnu.org/java
● www.kaffe.org, www.sablevm.org
● java-gnome.sourceforge.net
● www.gtk.org, glade.gtk.org
● swingwt.sourceforge.net
● www.eclipse.org, www.netbeans.org
● www.argouml.org, ireports.sourceforge.net

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 31
Perguntas

● Dúvidas:
fernando@lozano.eti.br
● Palestras, artigos e
Apostilas:
www.lozano.eti.br
● Livro:
Java em GNU/Linux
www.altabooks.com.br

© 2004 Fernando Lozano, http://www.lozano.eti.br Desenvolvimento Java para Desktops Livres Pag. 32