Учебники

Java — Основы апплета

Апплет — это Java-программа, которая запускается в веб-браузере. Апплет может быть полнофункциональным Java-приложением, поскольку в его распоряжении находится весь Java API.

Между апплетом и автономным Java-приложением есть несколько важных отличий, включая следующие:

  • Апплет — это класс Java, который расширяет класс java.applet.Applet.

  • Метод main () не вызывается в апплете, и класс апплета не будет определять main ().

  • Апплеты предназначены для встраивания в HTML-страницу.

  • Когда пользователь просматривает HTML-страницу, которая содержит апплет, код для апплета загружается на компьютер пользователя.

  • JVM требуется для просмотра апплета. JVM может быть подключаемым модулем веб-браузера или отдельной средой выполнения.

  • JVM на компьютере пользователя создает экземпляр класса апплета и вызывает различные методы в течение жизни апплета.

  • Апплеты имеют строгие правила безопасности, которые применяются веб-браузером. Безопасность апплета часто упоминается как безопасность песочницы, сравнивая апплет с ребенком, играющим в песочнице с различными правилами, которые необходимо соблюдать.

  • Другие классы, в которых нуждается апплет, могут быть загружены в один файл Java Archive (JAR).

Апплет — это класс Java, который расширяет класс java.applet.Applet.

Метод main () не вызывается в апплете, и класс апплета не будет определять main ().

Апплеты предназначены для встраивания в HTML-страницу.

Когда пользователь просматривает HTML-страницу, которая содержит апплет, код для апплета загружается на компьютер пользователя.

JVM требуется для просмотра апплета. JVM может быть подключаемым модулем веб-браузера или отдельной средой выполнения.

JVM на компьютере пользователя создает экземпляр класса апплета и вызывает различные методы в течение жизни апплета.

Апплеты имеют строгие правила безопасности, которые применяются веб-браузером. Безопасность апплета часто упоминается как безопасность песочницы, сравнивая апплет с ребенком, играющим в песочнице с различными правилами, которые необходимо соблюдать.

Другие классы, в которых нуждается апплет, могут быть загружены в один файл Java Archive (JAR).

Жизненный цикл апплета

Четыре метода в классе Applet дают вам основу для построения любого серьезного апплета —

  • init — Этот метод предназначен для любой инициализации, необходимой для вашего апплета. Он вызывается после обработки тегов param внутри тега applet.

  • start — этот метод вызывается автоматически после того, как браузер вызывает метод init. Он также вызывается всякий раз, когда пользователь возвращается на страницу, содержащую апплет, после перехода на другие страницы.

  • stop — этот метод вызывается автоматически, когда пользователь покидает страницу, на которой находится апплет. Поэтому его можно вызывать повторно в одном и том же апплете.

  • уничтожить — этот метод вызывается только тогда, когда браузер выключается нормально. Поскольку апплеты предназначены для жизни на HTML-странице, обычно не следует оставлять ресурсы после того, как пользователь покидает страницу, содержащую апплет.

  • paint — вызывается сразу после метода start (), а также в любое время, когда апплет должен перерисовать себя в браузере. Метод paint () фактически унаследован от java.awt.

init — Этот метод предназначен для любой инициализации, необходимой для вашего апплета. Он вызывается после обработки тегов param внутри тега applet.

start — этот метод вызывается автоматически после того, как браузер вызывает метод init. Он также вызывается всякий раз, когда пользователь возвращается на страницу, содержащую апплет, после перехода на другие страницы.

stop — этот метод вызывается автоматически, когда пользователь покидает страницу, на которой находится апплет. Поэтому его можно вызывать повторно в одном и том же апплете.

уничтожить — этот метод вызывается только тогда, когда браузер выключается нормально. Поскольку апплеты предназначены для жизни на HTML-странице, обычно не следует оставлять ресурсы после того, как пользователь покидает страницу, содержащую апплет.

paint — вызывается сразу после метода start (), а также в любое время, когда апплет должен перерисовать себя в браузере. Метод paint () фактически унаследован от java.awt.

Апплет «Привет, мир»

Ниже приведен простой апплет с именем HelloWorldApplet.java —

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

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

Эти операторы импорта переносят классы в область действия нашего класса апплета —

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

Без этих операторов импорта компилятор Java не распознал бы классы Applet и Graphics, на которые ссылается класс applet.

Апплет Класс

Каждый апплет является расширением класса java.applet.Applet . Базовый класс Applet предоставляет методы, которые производный класс Applet может вызывать для получения информации и услуг из контекста браузера.

К ним относятся методы, которые делают следующее —

  • Получить параметры апплета
  • Получить сетевое расположение файла HTML, который содержит апплет
  • Получить сетевое расположение каталога класса апплета
  • Распечатать сообщение о состоянии в браузере
  • Получить изображение
  • Получить аудиоклип
  • Воспроизвести аудиоклип
  • Изменить размер апплета

Кроме того, класс Applet предоставляет интерфейс, с помощью которого средство просмотра или браузер получает информацию об апплете и контролирует выполнение апплета. Зритель может —

  • Запрос информации об авторе, версии и авторских правах апплета
  • Запросить описание параметров, которые распознает апплет
  • Инициализировать апплет
  • Уничтожить апплет
  • Запустить выполнение апплета
  • Остановить выполнение апплета

Класс Applet предоставляет реализации по умолчанию для каждого из этих методов. Эти реализации могут быть переопределены при необходимости.

Апплет «Hello, World» завершен. Единственный переопределенный метод — метод рисования.

Вызов апплета

Апплет может быть вызван встраиванием директив в файл HTML и просмотром файла через средство просмотра апплета или браузер с поддержкой Java.

Тег <applet> является основой для встраивания апплета в файл HTML. Ниже приведен пример, который вызывает апплет «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>

Примечание. Вы можете обратиться к тегу апплета HTML, чтобы узнать больше о вызове апплета из HTML.

Атрибут кода тега <applet> является обязательным. Он определяет класс Applet для запуска. Ширина и высота также необходимы для указания начального размера панели, в которой запускается апплет. Директива апплета должна быть закрыта тегом </ applet>.

Если апплет принимает параметры, значения можно передать для параметров, добавив теги <param> между <applet> и </ applet>. Браузер игнорирует текст и другие теги между тегами апплета.

Браузеры без поддержки Java не обрабатывают <applet> и </ applet>. Поэтому все, что появляется между тегами, не связанными с апплетом, видно в браузерах без поддержки Java.

Зритель или браузер ищет скомпилированный код Java в месте нахождения документа. Чтобы указать другое, используйте атрибут codebase тега <applet>, как показано ниже —

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

Если апплет находится в пакете, отличном от пакета по умолчанию, в атрибуте кода необходимо указать удерживающий пакет, используя символ точки (.) Для разделения компонентов пакета / класса. Например —

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

Получение параметров апплета

В следующем примере показано, как заставить апплет реагировать на параметры настройки, указанные в документе. Этот апплет отображает рисунок шахматной доски черного и второго цвета.

Второй цвет и размер каждого квадрата могут быть указаны как параметры для апплета в документе.

CheckerApplet получает свои параметры в методе init (). Он также может получить свои параметры в методе paint (). Однако получить значения и сохранить настройки один раз в начале апплета, а не при каждом обновлении, удобно и эффективно.

Программа просмотра или браузер апплета вызывает метод init () каждого запускаемого им апплета. Зритель вызывает init () один раз, сразу после загрузки апплета. (Applet.init () реализован, чтобы ничего не делать.) Переопределите реализацию по умолчанию, чтобы вставить пользовательский код инициализации.

Метод Applet.getParameter () извлекает параметр по имени параметра (значение параметра всегда является строкой). Если значение является числовым или другими не символьными данными, строка должна быть проанализирована.

Ниже приведен скелет 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) {}
}

Вот методы CheckerApplet init () и private parseSquareSize () —

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
   }
}

Апплет вызывает parseSquareSize () для анализа параметра squareSize. parseSquareSize () вызывает метод библиотеки Integer.parseInt (), который анализирует строку и возвращает целое число. Integer.parseInt () генерирует исключение всякий раз, когда его аргумент недопустим.

Поэтому parseSquareSize () перехватывает исключения, а не позволяет сбою апплета при неправильном вводе.

Апплет вызывает parseColor () для разбора параметра цвета в значение Color. parseColor () выполняет серию сравнений строк, чтобы сопоставить значение параметра с именем предопределенного цвета. Вам нужно реализовать эти методы, чтобы этот апплет работал.

Указание параметров апплета

Ниже приведен пример файла HTML со встроенным CheckerApplet. HTML-файл определяет оба параметра для апплета с помощью тега <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>

Примечание. Имена параметров не чувствительны к регистру.

Преобразование приложения в апплеты

Легко преобразовать графическое Java-приложение (то есть приложение, которое использует AWT и которое можно запустить с помощью средства запуска Java-программ) в апплет, который можно встроить в веб-страницу.

Ниже приведены конкретные шаги для преобразования приложения в апплет.

  • Создайте HTML-страницу с соответствующим тегом для загрузки кода апплета.

  • Поставьте подкласс класса JApplet. Сделайте этот класс публичным. В противном случае апплет не может быть загружен.

  • Исключите основной метод в приложении. Не создавайте рамочное окно для приложения. Ваше приложение будет отображаться внутри браузера.

  • Переместите любой код инициализации из конструктора окна фрейма в метод init апплета. Вам не нужно явно создавать объект апплета. Браузер создает его для вас и вызывает метод init.

  • Удалить вызов setSize; для апплетов изменение размера производится с помощью параметров ширины и высоты в файле HTML.

  • Удалить вызов setDefaultCloseOperation. Апплет не может быть закрыт; он завершается при выходе из браузера.

  • Если приложение вызывает setTitle, исключите вызов метода. Апплеты не могут иметь строки заголовка. (Конечно, вы можете озаглавить саму веб-страницу, используя тег заголовка HTML.)

  • Не вызывайте setVisible (true). Апплет отображается автоматически.

Создайте HTML-страницу с соответствующим тегом для загрузки кода апплета.

Поставьте подкласс класса JApplet. Сделайте этот класс публичным. В противном случае апплет не может быть загружен.

Исключите основной метод в приложении. Не создавайте рамочное окно для приложения. Ваше приложение будет отображаться внутри браузера.

Переместите любой код инициализации из конструктора окна фрейма в метод init апплета. Вам не нужно явно создавать объект апплета. Браузер создает его для вас и вызывает метод init.

Удалить вызов setSize; для апплетов изменение размера производится с помощью параметров ширины и высоты в файле HTML.

Удалить вызов setDefaultCloseOperation. Апплет не может быть закрыт; он завершается при выходе из браузера.

Если приложение вызывает setTitle, исключите вызов метода. Апплеты не могут иметь строки заголовка. (Конечно, вы можете озаглавить саму веб-страницу, используя тег заголовка HTML.)

Не вызывайте setVisible (true). Апплет отображается автоматически.

Обработка событий

Апплеты наследуют группу методов обработки событий из класса Container. Класс Container определяет несколько методов, таких как processKeyEvent и processMouseEvent, для обработки определенных типов событий, а затем один метод catch-all, называемый processEvent.

Чтобы отреагировать на событие, апплет должен переопределить соответствующий специфичный для события метод.

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! ");
   }
}

Теперь давайте назовем этот апплет следующим образом —

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

Первоначально, апплет отобразит «инициализация апплета. Запуск апплета». Затем, как только вы нажмете внутри прямоугольника, будет отображаться «щелчок мышью».

Отображение изображений

Апплет может отображать изображения в формате GIF, JPEG, BMP и других. Чтобы отобразить изображение в апплете, вы используете метод drawImage (), найденный в классе java.awt.Graphics.

Ниже приведен пример, иллюстрирующий все шаги, чтобы показать изображения —

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);
   }  
}

Теперь давайте назовем этот апплет следующим образом —

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

Воспроизведение аудио

Апплет может воспроизводить аудиофайл, представленный интерфейсом AudioClip в пакете java.applet. Интерфейс AudioClip имеет три метода, в том числе —

  • public void play () — воспроизводит аудиоклип один раз с начала.

  • public void loop () — Заставляет непрерывно воспроизводить аудиоклип.

  • public void stop () — останавливает воспроизведение аудиоклипа.

public void play () — воспроизводит аудиоклип один раз с начала.

public void loop () — Заставляет непрерывно воспроизводить аудиоклип.

public void stop () — останавливает воспроизведение аудиоклипа.

Чтобы получить объект AudioClip, вы должны вызвать метод getAudioClip () класса Applet. Метод getAudioClip () немедленно возвращает значение независимо от того, преобразуется ли URL в реальный аудиофайл. Аудиофайл не загружается до тех пор, пока не будет предпринята попытка воспроизвести аудиоклип.

Ниже приведен пример, иллюстрирующий все шаги для воспроизведения аудио —

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();
      }
   }
}

Теперь давайте назовем этот апплет следующим образом —

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

Вы можете использовать test.wav на вашем ПК для проверки приведенного выше примера.