Java - Noções básicas de miniaplicativo

A appleté um programa Java executado em um navegador da web. Um miniaplicativo pode ser um aplicativo Java totalmente funcional porque possui toda a API Java à sua disposição.

Existem algumas diferenças importantes entre um miniaplicativo e um aplicativo Java autônomo, incluindo o seguinte -

  • Um miniaplicativo é uma classe Java que estende a classe java.applet.Applet.

  • Um método main () não é chamado em um miniaplicativo e uma classe de miniaplicativo não definirá main ().

  • Os miniaplicativos são projetados para serem incorporados a uma página HTML.

  • Quando um usuário visualiza uma página HTML que contém um miniaplicativo, o código do miniaplicativo é baixado para a máquina do usuário.

  • É necessário um JVM para visualizar um miniaplicativo. A JVM pode ser um plug-in do navegador da Web ou um ambiente de tempo de execução separado.

  • A JVM na máquina do usuário cria uma instância da classe do miniaplicativo e chama vários métodos durante a vida útil do miniaplicativo.

  • Os miniaplicativos têm regras de segurança rígidas que são aplicadas pelo navegador da web. A segurança de um miniaplicativo é freqüentemente referida como segurança de sandbox, comparando o miniaplicativo a uma criança brincando em uma sandbox com várias regras que devem ser seguidas.

  • Outras classes de que o miniaplicativo precisa podem ser baixadas em um único arquivo Java Archive (JAR).

Ciclo de Vida de um Applet

Quatro métodos na classe Applet fornecem a estrutura na qual você constrói qualquer miniaplicativo sério -

  • init- Este método se destina a qualquer inicialização necessária para o seu miniaplicativo. Ele é chamado depois que as tags param dentro da tag do miniaplicativo foram processadas.

  • start- Este método é chamado automaticamente depois que o navegador chama o método init. Também é chamado sempre que o usuário retorna à página que contém o miniaplicativo após ter ido para outras páginas.

  • stop- Este método é chamado automaticamente quando o usuário sai da página em que o miniaplicativo está. Ele pode, portanto, ser chamado repetidamente no mesmo miniaplicativo.

  • destroy- Este método só é chamado quando o navegador é encerrado normalmente. Como os miniaplicativos devem residir em uma página HTML, normalmente você não deve deixar recursos para trás depois que um usuário deixa a página que contém o miniaplicativo.

  • paint- Chamado imediatamente após o método start (), e também sempre que o miniaplicativo precisar se redesenhar no navegador. O método paint () é, na verdade, herdado de java.awt.

Um miniaplicativo "Hello, World"

A seguir está um miniaplicativo simples chamado HelloWorldApplet.java -

import java.applet.*;
import java.awt.*;

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}

Essas instruções de importação trazem as classes para o escopo de nossa classe de applet -

  • java.applet.Applet
  • java.awt.Graphics

Sem essas instruções de importação, o compilador Java não reconheceria as classes Applet e Graphics, às quais a classe applet se refere.

A classe Applet

Cada applet é uma extensão da classe java.applet.Applet . A classe Applet base fornece métodos que uma classe Applet derivada pode chamar para obter informações e serviços do contexto do navegador.

Isso inclui métodos que fazem o seguinte -

  • Obter parâmetros de miniaplicativo
  • Obtenha a localização de rede do arquivo HTML que contém o miniaplicativo
  • Obtenha a localização de rede do diretório de classe do miniaplicativo
  • Imprima uma mensagem de status no navegador
  • Buscar uma imagem
  • Buscar um clipe de áudio
  • Tocar um clipe de áudio
  • Redimensione o miniaplicativo

Além disso, a classe Applet fornece uma interface pela qual o visualizador ou navegador obtém informações sobre o miniaplicativo e controla sua execução. O visualizador pode -

  • Solicite informações sobre o autor, versão e direitos autorais do miniaplicativo
  • Solicite uma descrição dos parâmetros que o miniaplicativo reconhece
  • Inicialize o miniaplicativo
  • Destrua o miniaplicativo
  • Inicie a execução do miniaplicativo
  • Pare a execução do miniaplicativo

A classe Applet fornece implementações padrão de cada um desses métodos. Essas implementações podem ser substituídas conforme necessário.

O miniaplicativo "Hello, World" está completo como está. O único método substituído é o método de pintura.

Invocando um miniaplicativo

Um miniaplicativo pode ser chamado incorporando diretivas em um arquivo HTML e exibindo o arquivo por meio de um visualizador de miniaplicativo ou navegador habilitado para Java.

A tag <applet> é a base para embutir um miniaplicativo em um arquivo HTML. A seguir está um exemplo que invoca o miniaplicativo "Hello, World" -

<html>
   <title>The Hello, World Applet</title>
   <hr>
   <applet code = "HelloWorldApplet.class" width = "320" height = "120">
      If your browser was Java-enabled, a "Hello, World"
      message would appear here.
   </applet>
   <hr>
</html>

Note- Você pode consultar Tag do miniaplicativo HTML para entender mais sobre como chamar miniaplicativos a partir de HTML.

O atributo code da tag <applet> é obrigatório. Ele especifica a classe Applet a ser executada. A largura e a altura também são necessárias para especificar o tamanho inicial do painel no qual um miniaplicativo é executado. A diretiva do miniaplicativo deve ser fechada com uma tag </applet>.

Se um miniaplicativo aceita parâmetros, os valores podem ser passados ​​para os parâmetros adicionando tags <param> entre <applet> e </applet>. O navegador ignora o texto e outras marcas entre as marcas do miniaplicativo.

Navegadores não habilitados para Java não processam <applet> e </applet>. Portanto, qualquer coisa que apareça entre as tags, não relacionada ao miniaplicativo, é visível em navegadores não habilitados para Java.

O visualizador ou navegador procura o código Java compilado no local do documento. Para especificar o contrário, use o atributo codebase da tag <applet> como mostrado -

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
   width = "320" height = "120">

Se um miniaplicativo residir em um pacote diferente do padrão, o pacote de retenção deve ser especificado no atributo code usando o caractere ponto (.) Para separar os componentes do pacote / classe. Por exemplo -

<applet  = "mypackage.subpackage.TestApplet.class" 
   width = "320" height = "120">

Obtendo os Parâmetros do Applet

O exemplo a seguir demonstra como fazer um miniaplicativo responder aos parâmetros de configuração especificados no documento. Este miniaplicativo exibe um padrão quadriculado de preto e uma segunda cor.

A segunda cor e o tamanho de cada quadrado podem ser especificados como parâmetros para o miniaplicativo dentro do documento.

CheckerApplet obtém seus parâmetros no método init (). Ele também pode obter seus parâmetros no método paint (). No entanto, obter os valores e salvar as configurações uma vez no início do miniaplicativo, em vez de a cada atualização, é conveniente e eficiente.

O visualizador ou navegador do miniaplicativo chama o método init () de cada miniaplicativo que executa. O visualizador chama init () uma vez, imediatamente após carregar o miniaplicativo. (Applet.init () é implementado para não fazer nada.) Substitua a implementação padrão para inserir o código de inicialização personalizado.

O método Applet.getParameter () busca um parâmetro dado o nome do parâmetro (o valor de um parâmetro é sempre uma string). Se o valor for numérico ou outro dado sem caractere, a string deve ser analisada.

O seguinte é um esqueleto de CheckerApplet.java -

import java.applet.*;
import java.awt.*;

public class CheckerApplet extends Applet {
   int squareSize = 50;   // initialized to default size
   public void init() {}
   private void parseSquareSize (String param) {}
   private Color parseColor (String param) {}
   public void paint (Graphics g) {}
}

Aqui estão os métodos init () e private parseSquareSize () de CheckerApplet -

public void init () {
   String squareSizeParam = getParameter ("squareSize");
   parseSquareSize (squareSizeParam);
   
   String colorParam = getParameter ("color");
   Color fg = parseColor (colorParam);
   
   setBackground (Color.black);
   setForeground (fg);
}

private void parseSquareSize (String param) {
   if (param == null) return;
   try {
      squareSize = Integer.parseInt (param);
   } catch (Exception e) {
      // Let default value remain
   }
}

O miniaplicativo chama parseSquareSize () para analisar o parâmetro squareSize. parseSquareSize () chama o método de biblioteca Integer.parseInt (), que analisa uma string e retorna um inteiro. Integer.parseInt () lança uma exceção sempre que seu argumento é inválido.

Portanto, parseSquareSize () captura exceções, em vez de permitir que o miniaplicativo falhe com entrada incorreta.

O miniaplicativo chama parseColor () para analisar o parâmetro de cor em um valor de cor. parseColor () faz uma série de comparações de strings para combinar o valor do parâmetro com o nome de uma cor predefinida. Você precisa implementar esses métodos para fazer este miniaplicativo funcionar.

Especificando Parâmetros de Applet

A seguir está um exemplo de um arquivo HTML com um CheckerApplet incorporado nele. O arquivo HTML especifica ambos os parâmetros para o miniaplicativo por meio da tag <param>.

<html>
   <title>Checkerboard Applet</title>
   <hr>
   <applet code = "CheckerApplet.class" width = "480" height = "320">
      <param name = "color" value = "blue">
      <param name = "squaresize" value = "30">
   </applet>
   <hr>
</html>

Note - Os nomes dos parâmetros não diferenciam maiúsculas de minúsculas.

Conversão de aplicativo para miniaplicativos

É fácil converter um aplicativo Java gráfico (ou seja, um aplicativo que usa o AWT e que pode ser iniciado com o iniciador do programa Java) em um miniaplicativo que pode ser incorporado a uma página da web.

A seguir estão as etapas específicas para converter um aplicativo em um miniaplicativo.

  • Faça uma página HTML com a tag apropriada para carregar o código do miniaplicativo.

  • Forneça uma subclasse da classe JApplet. Torne esta aula pública. Caso contrário, o miniaplicativo não pode ser carregado.

  • Elimine o método principal do aplicativo. Não construa uma janela de quadro para o aplicativo. Seu aplicativo será exibido dentro do navegador.

  • Mova qualquer código de inicialização do construtor da janela do quadro para o método init do miniaplicativo. Você não precisa construir explicitamente o objeto do miniaplicativo. O navegador cria uma instância para você e chama o método init.

  • Remova a chamada para setSize; para miniaplicativos, o dimensionamento é feito com os parâmetros de largura e altura no arquivo HTML.

  • Remova a chamada para setDefaultCloseOperation. Um miniaplicativo não pode ser fechado; ele termina quando o navegador é encerrado.

  • Se o aplicativo chamar setTitle, elimine a chamada para o método. Os miniaplicativos não podem ter barras de título. (Você pode, é claro, intitular a própria página da web, usando a tag de título HTML.)

  • Não chame setVisible (true). O miniaplicativo é exibido automaticamente.

Manipulação de eventos

Os miniaplicativos herdam um grupo de métodos de tratamento de eventos da classe Container. A classe Container define vários métodos, como processKeyEvent e processMouseEvent, para lidar com tipos específicos de eventos e, em seguida, um método pega-tudo chamado processEvent.

Para reagir a um evento, um miniaplicativo deve substituir o método específico do evento apropriado.

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;

public class ExampleEventHandling extends Applet implements MouseListener {
   StringBuffer strBuffer;

   public void init() {
      addMouseListener(this);
      strBuffer = new StringBuffer();
      addItem("initializing the apple ");
   }

   public void start() {
      addItem("starting the applet ");
   }

   public void stop() {
      addItem("stopping the applet ");
   }

   public void destroy() {
      addItem("unloading the applet");
   }

   void addItem(String word) {
      System.out.println(word);
      strBuffer.append(word);
      repaint();
   }

   public void paint(Graphics g) {
      // Draw a Rectangle around the applet's display area.
      g.drawRect(0, 0, 
      getWidth() - 1,
      getHeight() - 1);

      // display the string inside the rectangle.
      g.drawString(strBuffer.toString(), 10, 20);
   }

   
   public void mouseEntered(MouseEvent event) {
   }
   public void mouseExited(MouseEvent event) {
   }
   public void mousePressed(MouseEvent event) {
   }
   public void mouseReleased(MouseEvent event) {
   }
   public void mouseClicked(MouseEvent event) {
      addItem("mouse clicked! ");
   }
}

Agora, vamos chamar esse miniaplicativo da seguinte maneira -

<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>

Inicialmente, o miniaplicativo exibirá "inicializando o miniaplicativo. Iniciando o miniaplicativo." Depois de clicar dentro do retângulo, "clique do mouse" também será exibido.

Exibindo Imagens

Um miniaplicativo pode exibir imagens no formato GIF, JPEG, BMP e outros. Para exibir uma imagem dentro do miniaplicativo, você usa o método drawImage () encontrado na classe java.awt.Graphics.

A seguir está um exemplo que ilustra todas as etapas para mostrar imagens -

import java.applet.*;
import java.awt.*;
import java.net.*;

public class ImageDemo extends Applet {
   private Image image;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String imageURL = this.getParameter("image");
      if(imageURL == null) {
         imageURL = "java.jpg";
      }
      try {
         URL url = new URL(this.getDocumentBase(), imageURL);
         image = context.getImage(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         // Display in browser status bar
         context.showStatus("Could not load image!");
      }
   }
   
   public void paint(Graphics g) {
      context.showStatus("Displaying image");
      g.drawImage(image, 0, 0, 200, 84, null);
      g.drawString("www.javalicense.com", 35, 100);
   }  
}

Agora, vamos chamar esse miniaplicativo da seguinte maneira -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

Reproduzindo Áudio

Um miniaplicativo pode reproduzir um arquivo de áudio representado pela interface AudioClip no pacote java.applet. A interface AudioClip possui três métodos, incluindo -

  • public void play() - Reproduz o clipe de áudio uma vez, desde o início.

  • public void loop() - Faz com que o clipe de áudio seja reproduzido continuamente.

  • public void stop() - Pára de reproduzir o clipe de áudio.

Para obter um objeto AudioClip, você deve invocar o método getAudioClip () da classe Applet. O método getAudioClip () retorna imediatamente, independentemente de o URL ser resolvido ou não para um arquivo de áudio real. O arquivo de áudio não é baixado até que seja feita uma tentativa de reproduzir o clipe de áudio.

A seguir está um exemplo que ilustra todas as etapas para reproduzir um áudio -

import java.applet.*;
import java.awt.*;
import java.net.*;

public class AudioDemo extends Applet {
   private AudioClip clip;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String audioURL = this.getParameter("audio");
      if(audioURL == null) {
         audioURL = "default.au";
      }
      try {
         URL url = new URL(this.getDocumentBase(), audioURL);
         clip = context.getAudioClip(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         context.showStatus("Could not load audio file!");
      }
   }
   
   public void start() {
      if(clip != null) {
         clip.loop();
      }
   }
   
   public void stop() {
      if(clip != null) {
         clip.stop();
      }
   }
}

Agora, vamos chamar esse miniaplicativo da seguinte maneira -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>

Você pode usar test.wav em seu PC para testar o exemplo acima.