Апплет что это java
36. Java — Основы работы с апплетами
Апплет – это программа Java, запускаемая в веб-браузере. Апплет может быть полнофункциональным Java-приложением, поскольку имеет в своем распоряжении весь прикладной программный интерфейс Java.
Содержание
Между апплетом и автономным Java-приложением есть некоторые важные различия, в том числе следующие:
Жизненный цикл апплета
Четыре метода в классе Applet определяют основу для создания любого серьезного апплета:
Динамическая сетевая программа «Привет, Мир»
Ниже приведен простой апплет HelloWorldApplet.java.
Эти операторы импорта переносят классы в область действия нашего класса Applet:
Без этих операторов импорта компилятор Java не распознал бы классы Applet и Graphics, на которые ссылается класс Applet.
Класс Applet
Каждый апплет является расширением класса java.applet.Applet. Базовый класс Applet предоставляет методы, которые производный класс Applet может вызывать для получения информации и служб из контекста браузера.
К ним относятся методы, которые выполняют следующее:
Кроме того, класс Applet предоставляет интерфейс, с помощью которого средство просмотра или браузер получает информацию об апплете и управляет его выполнением. Зритель может:
Класс Applet предоставляет реализации по умолчанию для каждого из этих методов. При необходимости эти реализации могут быть отменены.
Динамическая сетевая программа Hello, World скомпилирована в данных условиях. Единственный переопределяемый метод – это метод отрисовки.
Вызов апплета
Динамическая сетевая программа может быть вызвана путем встраивания директив в файл HTML и просмотра файла через программу просмотра апплета или браузер с поддержкой Java.
Примечание. Вы можете обратиться к HTML-тегу апплета, чтобы узнать больше о вызове апплета из HTML.
Если апплет принимает параметры, для параметров можно передать значения, добавив теги
Если апплет находится в пакете, отличном от пакета по умолчанию, пакет хранения должен быть указан в атрибуте кода с использованием символа точки (.) для разделения компонентов пакета/класса. Например:
Получение параметров апплета
В следующем примере показано, как заставить апплет реагировать на параметры настройки, указанные в документе. Этот апплет отображает узор шахматной доски черного и второго цвета.
Второй цвет и размер каждого квадрата могут быть указаны в качестве параметров апплета в документе.
CheckerApplet получает свои параметры в методе init(). Он также может получать свои параметры в методе paint(). Однако получение значений и сохранение настроек один раз при запуске апплета, а не при каждом обновлении, более удобно и эффективно.
Средство просмотра апплета или браузер вызывает метод init() для каждого апплета, который он запускает. Программа просмотра вызывает init() один раз, сразу после загрузки апплета. (Applet.init() не выполняет никаких функций.) Переопределите реализацию по умолчанию, чтобы вставить пользовательский код инициализации.
Метод Applet.getParameter() выбирает параметр по имени параметра (значение параметра всегда является строкой). Если значение представлено числовыми или другими небуквенными данными, строку необходимо проанализировать.
Ниже приведен скелет программы CheckerApplet.java
Вот метод CheckerApplet’s init() и частный метод parseSquareSize():
Динамическая сетевая программа вызывает parseSquareSize() для анализа параметра squareSize. parseSquareSize() вызывает библиотечный метод Integer.parseInt(), который анализирует строку и возвращает целое число. Integer.parseInt() выдает исключение всякий раз, когда его аргумент недопустим.
Следовательно, parseSquareSize() перехватывает исключения, а не позволяет апплету останавливаться при неверном вводе.
Динамическая сетевая программа вызывает parseColor(), чтобы проанализировать параметр цвета в значение цвета. parseColor() выполняет серию сравнений строк, чтобы сопоставить значение параметра с именем предопределенного цвета. Вам необходимо реализовать эти методы, чтобы этот апплет работал.
Определение параметров апплета
Ниже приведен пример HTML-файла со встроенным CheckerApplet. Файл HTML определяет оба параметра апплета с помощью тега
Примечание: в именах параметров не учитывается регистр.
Преобразование приложений в апплет
Графическое приложение Java (то есть приложение, которое использует графический интерфейс пользователя и которое можно запускать с помощью средства запуска программ Java) легко преобразовать в апплет, которую можно встроить в веб-страницу.
Ниже приведены конкретные шаги для преобразования приложения в апплет.
Обработка событий
Динамические сетевые программы наследуют группу методов обработки событий от класса Container. Класс Container определяет несколько методов, таких как processKeyEvent и processMouseEvent, для обработки определенных типов событий, а затем один универсальный метод, называемый processEvent.
Чтобы отреагировать на событие, апплет должен переопределить соответствующий метод для конкретного события.
Теперь давайте назовем этот апплет следующим образом:
Первоначально апплет будет отображать «инициализацию апплета. запуск апплета». Затем, как только вы щелкнете внутри прямоугольника, также будет отображаться «кнопка мышки нажата».
Отображение изображений
Динамическая сетевая программа может отображать изображения в формате GIF, JPEG, BMP и других форматах. Чтобы отобразить изображение в апплете, вы используете метод drawImage() из класса java.awt.Graphics.
Ниже приведен пример, иллюстрирующий все шаги для отображения изображений.
Теперь давайте назовем этот апплет следующим образом:
Воспроизведение аудио
Динамическая сетевая программа может воспроизводить аудиофайл, представленный интерфейсом AudioClip в пакете java.applet. Интерфейс AudioClip имеет три метода, в том числе:
Чтобы получить объект AudioClip, необходимо вызвать метод getAudioClip() класса Applet. Метод getAudioClip() немедленно возвращается независимо от того, ссылается ли URL-адрес на фактический аудиофайл. Аудиофайл не загружается, пока не будет сделана попытка воспроизвести аудиоклип.
Ниже приведен пример, иллюстрирующий все шаги для воспроизведения звука.
Теперь давайте назовем этот апплет следующим образом:
Познаём Java. Вторая чашка: собираем классы в кучки. Пробуем апплеты
Чем обусловлена структура Java?
Как вы уже слышали, Java проектировалась с рассчётом на совместимость со всем, чем только можно. Такое ограничение вынудило разработчиков Java сделать её такой, чтобы максимально упростить развёртывание приложений, при этом обеспечив логическую стройность языка.
Как происходит загрузка классов?
Пакеты классов
Что ж, теперь вы знаете как работает загрузчик классов. В реальных проектов количество classpath измеряется десятками, а то и сотнями.
Организация кода
Если вы пишете свои первые маленькие примерчики и вам лень создавать иерархию классов — пусть, это ваше право. Но помните, в серьёзном проекте вы всегда должны будете разложить свои классы по пакетам. Обычно корневые пакеты создаются такими, чтобы ясно давать понять кто автор кода, и к чему он относится.
Например:
ru.vasiapupkin.photomaker выбирается корневым пакетом
ru.vasiapupkin.photomaker.core сюда мы пишем классы отвечающие за логику
ru.vasiapupkin.photomaker.visual сюда, допустим, все наши окошки приложения
и так далее.
Чтобы создать класс
ru.vasiapupkin.photomaker.Starter
вы должны:
создать файл Starter.java в папке ru/vasiapupkin/photomaker/
прописать в нём первой строчкой (точнее говоря, до импортов)
package ru.vasiapupkin.photomaker;
Коллижн
«А что будет, если у нас будет два класса с одним именем?», — спросите вы. «Смотрите», — отвечу я.
Допустим вы решили что вы умнее джавы и создали свой класс строки — String. Но вот проблема, у нас же уже есть такой!
Значит, вам придётся положить свой класс в пакет, скажем ru.vp.stuff и обращаться к нему так: ru.vp.stuff.String.
Именно поэтому не рекомендуется класть классы прямо в корень classpath — таким образом вы роете себе дорогу к несовместимости, ведь Java требует, чтобы каждый класс определялся однозначно. Именно поэтому нельзя написать так:
import ru.vp.SuperClass;
import ru.mashka.SuperClass;
За это вас накажет компилятор, потому что он не будет знать, какой из них использовать.
Мораль: правильно выбирайте и имя класс и имя пакета.
Погоняем?
Давайте улучшим первое приложение. Эх, классика интернета… Создадим апплет.
Эх, может быть апплетами.
import java.applet.Applet ;
import java.awt.Graphics ;
public class HelloWorld extends Applet<
Так, что у нас тут? Импортировано 2 класса, один из них — стандартный пустой апплет, который мы будем расширять. Второй — Graphics. Graphics — это понятие из библиотеки AWT. Кстати, небольшой экскурс. AWT (Abstract Window Toolkit) входил ещё в первую Java и был предназначен для многих задач, связанных в основном с отображением.
Так вот, объект типа Graphics позволяет нам рисовать на себе всякую муру типа строк, линий, кружочков и прочего. В данном примере мы написали строчку с отступом.
Метод paint здесь написан не от балды — он перекрывает аналогичный метод класса Applet, и когда java будет перерисовывать этот конкретный апплет, она вызовет этот метод.
Посмотреть на наш апплет достаточно просто — пишем небольшой HTML:
… а может приложением.
Давайте попробуем сделать HelloWorld в standalone-приложении.
import java.awt.* ;
import javax.swing.* ;
public class HelloWorld extends JFrame<
public static void main( String [] args) <
new HelloWorld();
>
<
add( new JLabel( «Hello world» ));
setSize(200,200);
setVisible( true );
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
>
>
Здесь мы полностью импортируем основные классы пакетов Swing и AWT. Swing — более поздняя чем AWT библиотека, сейчас именно она обеспечивает отображение основной части графического интерфейса для Java-приложений.
Итак, в main мы просто создаём экземпляр класса HelloWorld.
Сейчас наш класс наследуется от класса JFrame. Это класс из Swing, он представляет собой окно, которое отображается пока не будет закрыто.
Блок <. >— это «общий конструктор». Он добавляется к любому конструктору нашего класса. Так как у нас нет ни одного — он добавляется к пустому конструктору без параметров, который создаётся на лету, если у класса нет ни одного.
Мы добавляем на окно новый объект типа JLabel (т.е. надпись), затем устанавливаем окну размеры и отображаем его. Последняя строчка нужна, чтобы выполнение приложения закончилось, когда будет закрыто окно. Таким образом, вы можете быть уверены что после закрытия окна у вас в памяти не останется висеть ваше приложение.
Запускать его нужно точно так же как и прошлое: пишем, компилируем, запускаем.
А может и сервлетами? Наверное, потом.
В этих двух статьях я постарался дать вам начальное представление о возможностях Java в общем. За рамками сегодняшней статьи (наверное, будут в завтрашней) остались сервлеты и прочие радости серверной части типа JSP-страниц, а также МИДлеты — приложения для мобилок. Я бы мог рассмотреть и то и то, но хотел бы знать, чего больше хотят читатели. Кроме того, возможно, нужно рассказать о самых основах языка. Примерно на том же уровне подробности, что и начало этой статьи. Напишите в комментариях, какую статью вы хотели бы видеть в следующий раз:
— классы и интерфейсы: ООП в джаве;
— буквы-цифры-строчки: работа с базовыми типами;
— создание оконных приложений с помощью Swing;
— от мала до велика: сервлеты, мидлеты и 2 слова о портлетах.
Когда отпишетесь — станет ясно, куда копать дальше. Всем спасибо за внимание.
Ссылка для тех, кому лень ждать завтра: основы языка (eng.).
Понятие апплета
Содержание
Введение
В первом упоминании Java-технологии, наиболее перспективными выглядели, так называемые, апплеты (небольшие программы, исполняемые внутри броузера, и позволяющие сделать web-страницы более интерактивными). Вспомним Internet 1995 года, когда большинство web-страниц было статичными, а динамическое содержимое состояло из Perl-скриптов, исполняемых посредством CGI (Common Gateway Interface) интерфейса. Особо большого пространства для фантазии при проектировании сайтов не было, отсутствовала анимированная графика, а также какое-либо взаимодействие между пользователями. Такое взаимодействие требует для отправки информации web-серверу использование цикла запроса-ответа иного рода. В то же время, компания Netscape захватила рынок броузеров и первой получила лицензию на использование продукции Java для броузера Netscape Navigator. После этого компания Microsoft также подписала контракт и включила в Internet Explorer свою версию виртуальной машины для поддержки выполнения Java-программ.
Спустя несколько лет мир снова взглянул на апплеты, как на программы, встраиваемые в броузер. Разработчики снова стали использовать решения, базирующиеся на апплетах, так как Java Plug-in от Sun позволяет обновлять старую версию виртуальной машины, встроенную в Internet Explorer, до последней – Java Runtime Environment (JRE) – посредством Технологии Get Java.
Кроме этого у вас в распоряжении имеются методы init, start, stop и destroy. При рисовании и отображении областей применяется метод paint, так как Applet является подклассом java.awt.Component. Эти пять ключевых методов работают следующим образом:
init – вызывается при загрузке броузером основного класса Applet. Обычно у апплетов нет конструктора. Вместо этого используется код их единовременной инициализации.
start – вызывается в начале выполнения апплета при посещении пользователем страницы.
stop – вызывается для остановки выполнения аплета, когда пользователь покидает страницу, содержащую данный апплет.
destroy – вызывается в случае, если броузер должен завершить работу апплета. При этом ресурсы можно восстановить, однако у вас не будет над ними контроля.
paint – вызывается, когда броузер определяет, что область отображения апплета является неверной.
В качестве примера рассмотрим апплет, который при вызове каждого из пяти методов выводит информацию в консоль. Метод paint используется также для отображения сообщения на экране. При каждом вызове метода paint число увеличивается. При этом напрашивается вопрос о том, где же можно найти сообщения, записываемые в консоль. Ответ зависит от используемого броузера, а иногда и от его версии. В IE 6.0 Java Console находится в меню Tools. В рабочем цикле Microsoft и IE6 консоль расположен в меню View. А в броузерах Mozilla и Netscape 7.0, Java Console находится в меню Web Development (вложено в меню Tools).
Код апплета выглядит следующим образом:
import java.awt.*;
import java.applet.*;
public class FirstApplet extends Applet <
public void init () <
System.out.println ( «In init()» ) ;
>
public void start () <
System.out.println ( «In start()» ) ;
>
public void stop () <
System.out.println ( «In stop()» ) ;
>
public void destroy () <
System.out.println ( «In destroy()» ) ;
>
Скомпилируйте апплет так же, как и любой другой исходный файл:
Если в файле не будет ошибок, будет создан класс FirstApplet.class.
Атрибут code указывает имя загружаемого класса. Значение атрибутов width и height очевидно – при их помощи выставляется желаемый размер отображения апплета. Если файл класса апплета использует базовую директорию отличную от директории файла-загрузчика HTML, вам потребуется задать CODEBASE, позволяющий указать броузеру расположение базовой директории.
Поместите данный тег в любой HTML-файл и загрузите его в броузере.
Далее представлен пример метода, содержащего несколько локальных внутренних классов:
Подобной проблемы не возникнет, если у вас был установлен Java Plug-in. В этом случае вам потребуется просто скомпилировать исходный код и загрузить HTML-файл в своем броузере.
Запуск потоков в апплетах
Используя потоки в апплетах, необходимо учитывать несколько важных концепций:
Создавая апплет, вы расширяете класс Applet. Поэтому, для того чтобы использовать потоки, необходимо реализовать интерфейс Runnable или определить поток как внутренний класс Thread.
В методе start апплета создайте новый объект Thread (хотя объект thread также содержит метод start, он не совпадает с соответствующим методом апплета).
Из-за того, что реализуется интерфейс Runnable, вам необходимо обеспечить для класса метод run. Данный метод вызывается при запуске потока объектом thread для выполнения предназначенных ему операций.
Следующий апплет демонстрирует скроллинг текста, который «проходит» по своему собственному потоку, что позволяет вносить новый текст в текстовое поле во время его прокрутки. Если бы прокручивающийся текст не находился в отдельном потоке, то этот текст так бы загрузил ЦПУ, что вводить текст в поле было бы невозможным.
import java.applet.*;
import java.awt.*;
public class ExampleThreads extends Applet implements Runnable <
String text = «An example of text scrolling in its own thread.» ;
TextField field;
Thread thread;
boolean running;
// Добавить необходимые пробелы в текст
for ( int i = 0 ; i ) <
text = text + ‘ ‘ ;
>
field = new TextField ( «Type Here» ) ;
add ( field ) ;
>
public void start () <
if ( thread == null ) <
thread = new Thread ( this ) ;
running = true ;
thread.start () ;
>
>
try <
Thread.sleep ( 100 ) ;
>
catch ( InterruptedException e ) <
>
>
>
Создайте HTML-страницу, как показано далее, после чего запустите ее в программе для просмотра апплетов или в броузере.
При запуске приложение должно выглядеть следующим образом:
Классы Applet, Image и MediaTracker
В представленной ранее статье описано, как посредством HTML-страницы передавать в апплет некоторую информацию, такую как местоположение файла класса, а также высота и размеры самого апплета. Кроме передачи информации о самом апплете и его исходном файле, можно также передавать необязательные параметры, используя для этой цели теги PARAM и метод getParameter класса Applet.
Например, вы хотите, чтобы в апплете отображалась графические или какие-либо другие объекты. Для того чтобы в апплете можно было использовать изображения, необходимо сначала связать каждое из них с абстрактным классом Image. Затем, путем передачи параметров через HTML-файл, можно задать информацию о количестве изображений и их именах.
Например, если вам необходимо отобразить в апплете четыре изображения, можно начать со строки:
У класса Image также есть методы getWidth и getHeight, которые возвращают значение размеров изображений в пикселях.
Тег PARAM имеет следующий синтаксис:
При помощи тега PARAM можно указывать апплету количество используемых изображений:
При помощи тегов PARAM укажем в HTML-файле имена файлов с изображениями:
Укажите апплету извлечь данные параметры при помощи метода getParameter. Строка String, передаваемая в метод getParameter, возвращает в HTML-тег значение названного параметра.
возвращает строку seahorse.jpg.
Для того чтобы узнать местонахождение встраиваемых ресурсов апплета вызовите метод getCodeBase, который возвратит их URL-адрес. Метода getImage позволяет извлечь объект изображения для выведения его на экран:
Осуществлять более сложные операции (такие как переключение между изображениями) можно при помощи класса MediaTracker, позволяющего управлять загружаемыми изображениями и отображать их статус. Класс MediaTracker является классом утилиты, используемым для отслеживания статуса многочисленных медиа-объектов.
Чтобы сконструировать объект MediaTracker, вызовите конструктор MediaTracker и передайте ему Component, который выполняет прорисовку изображений.
Если вы уже создали объект MediaTracker, задайте ему изображение, вызвав для этого метод addImage (Image image, int ID). Кроме того, каждому изображению может быть назначен уникальный идентификатор. Данный идентификатор контролирует порядок приоритетов, в котором выбираются изображения. С его помощью можно также идентифицировать уникальные наборы независимых изображений. Чем больше значение ID, тем выше приоритет загрузки изображений.
Для того чтобы определить, загружено ли изображение и готово ли оно к прорисовке, вызовите один из нижеперечисленных методов:
checkAll – проверяет, закончилась ли загрузка всех изображений, отслеживаемых данным объектом media tracker.
checkAll(boolean load) – проверяет, закончилась ли загрузка всех изображений, отслеживаемых данным объектом media tracker.
checkID(int id) – проверяет, закончилась ли загрузка всех изображений, отслеживаемых данным объектом media tracker, и помеченных специальным идентификатором.
statusAll(boolean load) – вычисляет и возвращает побитовый оператор включающего ИЛИ статуса всех media-объектов, отслеживаемых данным объектом media tracker.
waitForAll() – начинает загрузку всех картинок, отслеживаемых данным media tracker.
waitForAll(long ms) – начинает загрузку всех изображений, отслеживаемых данным объектом media tracker.
В классе MediaTracker есть также другие методы и константы, полезные при работе с изображениями.
Основы Java-апплета
Давайте сначала разберемся, сколько Package поддерживает GUI:
Возврат к созданию приложения с графическим интерфейсом:
Java была запущена 23 января 1996 года (JDK 1.0), и в то время она поддерживала только приложение CUI (Character User Interface). Но в 1996 году VB (Visual Basic) от Microsoft был предпочтен для программирования GUI. Поэтому разработчики Java в спешке (то есть в течение 7 дней) предоставили поддержку графического интерфейса от операционной системы (ОС). Теперь такие компоненты, как кнопка и т. Д. были зависимы от платформы (т.е. на каждой платформе будет свой размер, кнопка формы). Но они сделали пересечение таких компонентов со всех платформ и дали небольшую библиотеку, которая содержит эти пересечения, и она доступна в технологии AWT (Abstract Window Toolkit), но не имеет расширенных функций, таких как диалоговое окно и т. Д.
Теперь, чтобы запустить Апплет, java нужен браузер, и в то время там был только «Internet Explorer», но Microsoft верит в монополию. Таким образом, «SUN Micro-System» (компания, которая разработала Java) заключила контракт с другой компанией, известной как «Netscape» (которая разработала Java Script), и теперь компания «Netscape» также известна как «Mozilla Firefox», которую мы все знаем как браузер. Теперь эти две компании разработали технологию под названием «SWING», и преимущество заключается в том, что компоненты SWING производятся самой Java. Поэтому теперь он не зависит от платформы, а также были добавлены некоторые дополнительные функции, которых не было в технологии AWT. Таким образом, мы можем сказать, что SWING намного более продвинутый по сравнению с технологией AWT.
Что такое апплет?
Апплет — это Java-программа, которая может быть встроена в веб-страницу. Он работает внутри веб-браузера и работает на стороне клиента. Апплет внедряется в HTML-страницу с использованием тега APPLET или OBJECT и размещается на веб-сервере.
Апплеты используются, чтобы сделать сайт более динамичным и интересным.
Важные моменты :
Жизненный цикл апплета:
Важно понимать порядок, в котором вызываются различные методы, показанные на изображении выше. Когда начинается апплет, в следующей последовательности вызываются следующие методы:
Когда апплет завершается, происходит следующая последовательность вызовов методов:
Давайте внимательнее посмотрим на эти методы.
Теперь возникает вопрос:
В. В прототипе метода paint () мы создали ссылку на объект, не создавая его объект. Но как можно создать ссылку на объект, не создавая его объект?
Отв. Всякий раз, когда мы передаем ссылку на объект в аргументах, объект будет предоставлен самим вызывающим. В этом случае вызывающим методом paint () является браузер, поэтому он предоставит объект. То же самое происходит, когда мы создаем очень простую программу в обычных программах Java. Например:
Здесь мы создали ссылку на объект, не создавая его объект, но он все еще выполняется, потому что он является вызывающим, то есть JVM предоставит ему объект.
Создание апплета Hello World:
Давайте начнем с апплета HelloWorld:
// Апплет Hello World
// Сохранить файл как HelloWorld.java
// класс HelloWorld расширяет апплет
public class HelloWorld extends Applet
// Переопределяем метод paint ()
public void paint(Graphics g)
Объяснение:
Здесь message — строка для вывода, начинающаяся с x, y. В окне Java верхний левый угол — это местоположение 0,0. Вызов drawString () в апплете приводит к отображению сообщения «Hello World», начиная с местоположения 20,20.
Запуск апплета HelloWorld:
После того, как вы введете исходный код для HelloWorld.java, скомпилируйте его так же, как вы компилировали Java-программы (используя команду javac ). Тем не менее, запуск HelloWorld с командой java вызовет ошибку, потому что это не приложение.
Существует два стандартных способа запуска апплета:
Каждый из этих методов описан далее.
Операторы ширины и высоты определяют размеры области отображения, используемой апплетом. Тег APPLET содержит несколько других опций. После создания этого HTML-файла вы можете использовать его для запуска апплета.
ПРИМЕЧАНИЕ. Chrome и Firefox больше не поддерживают NPAPI (технология, необходимая для апплетов Java). Обратитесь сюда
// Апплет Hello World
// Сохранить файл как HelloWorld.java
// класс HelloWorld расширяет апплет