1
|
|
2
|
- Modulo II – Programação Web com Java
- Modelo de Execução
- Ciclo de Vida
- Classe Applet
- Empacotando Applets em arquivos jar
- Modelo de Caixa de Areia – Sandbox
- Applet com Swing
|
3
|
- Linguagem de Programação JAVA
- Ismael H. F. Santos, Apostila
UniverCidade, 2002
- The Java Tutorial: A practical guide for programmers
- Tutorial on-line: http://java.sun.com/docs/books/tutorial
- Java in a Nutshell
- David Flanagan, O´Reilly &
Associates
- Just Java 2
- Mark C. Chan, Steven W. Griffith
e Anthony F. Iasi, Makron Books.
- Java 1.2
- Laura Lemay & Rogers
Cadenhead, Editora Campos
|
4
|
- Core Java 2, Cay S. Horstmann, Gary Cornell
- Volume 1 (Fundamentos)
- Volume 2 (Características Avançadas)
- Java: Como Programar, Deitel & Deitel
- Thinking in Patterns with JAVA, Bruce Eckel
- Gratuito. http://www.mindview.net/Books/TIJ/
|
5
|
|
6
|
- Programas Java que executam em browsers “java enabled”
- JVM que interpreta os bytecodes
- Imagem “viva” em uma página HTML
- reage a comandos
- muda sua aparência
- interação (envio de dados) com o servidor
|
7
|
- Uso de applets na Internet tem limitações
- incompatibilidade de versões de Java nos browsers
- download em linhas de baixa capacidade
- O ambiente em Intranets é diferente
- ambiente é controlado
- redes com taxas de transmissão bem mais elevadas
|
8
|
- Execução de código Java em um browser
- definido em uma página do servidor
- carregado e executado no cliente
- “Tag” HTML especifica
- onde obter o código do applet (arquivos .class)
- como posicionar o applet na página
- Passagem de parâmetros pela página HTML
|
9
|
|
10
|
- Criação de área no browser para o applet
- Criação do objeto applet (um panel especial)
- Inicialização e execução do applet
- execução do método init
- execução do método start
- Posterior execução dos métodos stop e destroy
|
11
|
|
12
|
|
13
|
- Chamado pelo browser quando o applet é carregado
- Responsável pela inicialização do applet
- processamento de parâmetros
- criação e adição de componentes de interface
- O “ambiente” do applet pode não estar completo no momento de sua
construção
- está completo quando init é chamado
|
14
|
- Chamado pelo browser para informar que o applet deve iniciar sua
execução
- após a chamada ao método init
- toda vez que o usuário retorna à página que contém o applet
- Só é necessário se alguma atividade deve ser suspensa quando o usuário
deixa a página, e reativada na volta
- threads, animações, audio
|
15
|
- Chamado pelo browser para informar que o applet deve interromper sua
execução
- quando a página que contém o applet é substituída
- imediatamente antes da “destruição” do applet
- As atividades interrompidas serão retomadas com a execução do método start.
|
16
|
- Chamado pelo browser para que o applet libere recursos que tenha alocado
- por exemplo, um applet com threads usaria o método init para criá-las e
o método destroy para destruí-las.
- O método stop será sempre chamado antes
|
17
|
|
18
|
- java.applet.Applet
- classe que modela um applet
- java.applet.AppletContext
- interface que modela um visualizador (browser)
- java.applet.AudioClip
- interface que modela um clip de áudio
|
19
|
|
20
|
- Sub-classe de Panel, do pacote awt
- É, essencialmente, um painel inserido em uma página HTML, em um
navegador
- Embora restrito em algumas funcionalidades (por uma questão de
segurança), pode interagir com o usuário como qualquer aplicação gráfica
awt
- Métodos:
- void init(); void start(); void stop();
- void destroy(); String getParameter(String name)
|
21
|
- import java.awt.*;
- import java.applet.*;
- public class MeuApplet extends Applet {
- public void init() {
- String msg =
getParameter("Mensagem");
- Label l = new Label(msg);
- l.setAlignment(Label.CENTER);
- setLayout(new BorderLayout());
- add(l, BorderLayout.CENTER);
- }
- }
|
22
|
- <html>
- <head>
- <title>Teste do
MeuApplet</title>
- </head>
- <body>
- <applet code=MeuApplet
width=300 height=200>
- <param
name="Mensagem" value="Olá Internet!">
- </applet>
- </body>
- </html>
|
23
|
- Outros Métodos
- URL getDocumentBase(); URL getCodeBase()
- String getAppletInfo(); String[][] getParameterInfo()
- Fornecendo Informações
- public String getAppletInfo() {
- return "Exibe uma mensagem
na tela";
- }
- public String[][] getParameterInfo() {
- return new String[][] {
- {"Mensagem",
"String", "Mensagem a exibir"}
- };
- }
|
24
|
- Modela o navegador, isto é, o programa que hospeda o applet
- Disponibiliza métodos de conveniência para obter dados do servidor de
onde veio o applet
- imagens, arquivos de áudio
- Também disponibiliza métodos de controle do navegador
|
25
|
- A classe Applet disponibiliza um método específico para este fim:
- AppletContext getAppletContext()
- Métodos
- Applet getApplet(String name)
- Enumeration getApplets()
- AudioClip getAudioClip(URL url)
- Image getImage(URL url)
- void showDocument(URL url)
- void showDocument(URL url, String target)
- void showStatus(String status)
|
26
|
- Algumas funcionalidades providas pelo contexto podem ser acessadas
diretamente através do applet. Para isso, a classe Applet disponibiliza
métodos como:
- void showStatus(String msg)
- AudioClip getAudioClip(URL url)
- Image getImage(URL url, String name)
|
27
|
- Modela um clip de áudio. Disponibiliza métodos para executar e
interromper a execução do clip
- Métodos
- void play(); void loop(); void
stop()
- Por conveniência, é possível executar um clip de áudio diretamente a
partir do applet. Para isso, a classe Applet disponibiliza:
- void play(URL url)
- void play(URL url, String name)
|
28
|
- import java.awt.*;
- import java.awt.event.*;
- import java.applet.*;
- public class MeuApplet extends Applet {
- AudioClip clip;
- public void init() {
- Button play= new
Button("Play"); Button stop= new Button("Stop");
- add(play); add(stop);
- clip =
getAudioClip(getDocumentBase(), "spacemusic.au");
- play.addActionListener(new
ActionListener() {
- public void
actionPerformed(ActionEvent ev) { clip.loop(); }});
- stop.addActionListener(new
ActionListener() {
- public void
actionPerformed(ActionEvent ev) { clip.stop(); }});
- }
- public void stop() { clip.stop(); }
- }
|
29
|
- <APPLET
- CODE=nome da classe
- WIDTH=largura em pixels
- HEIGHT=altura em pixels
- [ARCHIVE=lista de arquivos jar]
- [CODEBASE=diretório]
- [ALT=texto alternativo]
- [NAME=nome do applet]
- [ALIGN=alinhamento]
- [VSPACE=espaço vertical em
pixels]
- [HSPACE=espaço horizontal em
pixels]
- >
- [<PARAM NAME=nome VALUE=valor>]
- [<PARAM NAME=nome VALUE=valor>]
- ...
- [texto alternativo]
- </APPLET>
|
30
|
- atributo CODE
- nome da classe que implementa o applet
- se a classe pertence a um pacote, este deve ser especificado
- atributo CODEBASE
- localização (URL) do código do applet
- se omitido, é assumida a mesma localização do documento HTML
- atributo ARCHIVE
- lista de arquivos (.jar) que contém classes e outros recursos que serão
“pré-carregados”
|
31
|
- <applet code=MeuApplet width=300 height=200>
- </applet>
- <applet code=meupacote.MeuApplet width=300 height=200>
- </applet>
- <applet code=MeuApplet codebase=diretorioDosApplets
- width=300 height=200>
- </applet>
|
32
|
- Semelhante ao de imagens (tag IMG)
- Tamanho: atributos WIDTH e HEIGHT
- Espaçamento: atributos VSPACE e HSPACE
- Alinhamento: atributo ALIGN
- LEFT, RIGHT
- TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM, ABSBOTTOM
|
33
|
|
34
|
- Applets em uma mesma página podem se comunicar
- O atributo NAME especifica um nome para um applet
- O método getApplet (de AppletContext) retorna uma referência para um applet
a partir de seu nome
|
35
|
- No arquivo HTML:
- <applet code=MeuApplet width=300 height=200 name="Applet1">
- </applet>
- Na classe que define um applet:
- AppletContext ctx = getAppletContext();
- MeuApplet applet1 = (MeuApplet)(ctx.getApplet("Applet1"));
- applet1.recebeDados(…);
|
36
|
|
37
|
- Java Archive (jar) é um formato de arquivo que permite juntar diversos
arquivos (classes, imagens, sons) em um único arquivo compactado (como
um .zip)
- Esse arquivo pode ser transmitido pela rede, do servidor para o cliente,
otimizando o processo de troca das informações necessárias para o applet
- São também comumente utilizados para empacotar e distribuir bibliotecas
- as classes que compõem a biblioteca são armazenadas em um arquivo .jar
- o arquivo .jar é adicionado ao CLASSPATH
|
38
|
- Um arquivo .jar também pode ser usado para distribuir uma aplicação
- entrada no “manifest file” especifica a classe principal (main) aplicação
- O programa jar cria arquivos no formato .jar para serem usados em applets
ou aplicações
- Um exemplo da sintaxe básica é:
- jar cf MeuApplet.jar *.class *.au
|
39
|
- No tag <applet>, podemos especificar o arquivo .jar e a JVM do
navegador se encarrega de “extrair” a(s) classe(s) desse arquivo:
- <html>
- <head>
- <title>Teste de Arquivos
.jar</title>
- </head>
- <body>
- <applet code=MeuApplet archive=MeuApplet.jar
- width=300
height=200></applet>
- </body>
- </html>
|
40
|
- A JVM se encarrega de obter as classes do arquivo .jar, mas o mesmo não
acontece com outros “recursos” (arquivos que não são de classes:
imagens, textos etc.)
- Esses recursos devem ser “obtidos” de forma especial para que possam ser
extraídos do arquivo .jar
- o carregador (“class loader”) sabe de onde a classe foi extraída e pode
extrair o recurso da mesma localização
|
41
|
- É necessário trocar uma linha:
- clip = getAudioClip(getDocumentBase(), "spacemusic.au");
- getAudioClip(MeuApplet.class.getResource("spacemusic.au"));
|
42
|
|
43
|
- Como o applet é um programa externo que irá executar na máquina do
cliente, é muito importante que haja um controle sobre o que ele pode ou
não fazer
- o usuário não tem como impedir sua execução!
- Esse controle pode ser menos rigoroso se o applet for “assinado”
|
44
|
- Tipicamente, applets executam em um modelo chamado “caixa de areia” (sandbox),
no qual uma série de restrições são impostas
- uma exceção do tipo SecurityException é lançada se o applet tenta
violar uma dessas restrições
|
45
|
- No modelo “caixa de areia” o applet:
- não pode executar código nativo
- não pode acessar arquivos locais
- não pode executar nenhum programa
- não pode ler propriedades do sistema
- somente versão do Java e do SO, e separadores
- tem suas janelas (pop up) identificadas
- só pode se comunicar com o computador de onde ele veio
|
46
|
|
47
|
- Apenas applets compatíveis com o Java 1.1 podem ser diretamente
visualizados nos navegadores Netscape e Internet Explorer
- Applets desenvolvidos utilizando recursos do Java 2 precisam de um plug-in
instalado para que possam ser visualizados
- A Sun Microsystems disponibiliza plug-ins para Netscape e para Internet
Explorer
|
48
|
- Para utilizar o plug-in, é preciso que a página HTML diga isso, o que é
feito através de uma mudança no tag HTML
- A Sun disponibiliza uma ferramenta que converte automaticamente arquivos
HTML para que o plug-in seja utilizado
- o tag que habilita uso do plug-in é bem mais complexo!
|
49
|
- O tag HTML gerado pela ferramenta da Sun, além de indicar ao navegador
que o plug-in deve ser utilizado, traz a informação de onde este plug-in
pode ser obtido caso ele ainda não esteja instalado
- O plug-in só precisa ser instalado uma única vez, permanecendo no
navegador
|
50
|
- A biblioteca Swing disponibiliza uma classe JApplet que pode ser
utilizada (no lugar da classe Applet) para criar applets utilizando os
elementos de interface do Swing
- assim como um JFrame, um JApplet é um “top level container”
- Um applet swing pode ter uma barra de menu, o que não é possível no applet
comum
|
51
|
- import java.awt.*;
- import javax.swing.*;
- public class MeuApplet extends JApplet {
- public void init() {
- String msg =
getParameter("Mensagem");
- JLabel l = new JLabel(msg);
-
l.setHorizontalAlignment(JLabel.CENTER);
- getContentPane().add(l,
BorderLayout.CENTER);
- }
- } Exercícios
– Questão 22
|
52
|
- A classe Applet herda de Component o método paint
- esse método é chamado quando o conteúdo de um componente deve ser “pintado”
- Para “desenhar” em um applet deve-se redefinir o método paint
- public void paint(Graphics g)
- A classe Graphics modela o graphics context que permite que aplicações
desenhem sobre componentes
|
53
|
- void setColor(Color c)
- void drawRect(int x, int y, int width, int height)
- void fillRect(int x, int y, int width, int height)
- void drawOval(int x, int y, int width, int height)
- void fillOval(int x, int y, int width, int height)
- void drawLine(int x1, int y1, int x2, int y2)
- void drawString(String str, int x, int y)
- void setFont(Font font)
|