Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование JDK (Java Developer’s Kit). 1 страница




1. Создание, ввод и сохранение обычного тестового файла, содержащего код программы, имеющего расширение.java (например, Hello.java). Использовать можно любой текстовый редактор, позволяющий работать с файлами, имеющими длинные имена, например Notepad.

2. Создание с помощью того же текстового редактора файла HTML (например, Hello.html), в который встраивается созданный апплет. Для этого в него включается следующий тег:<APPLET CODE=Hello.class WIDTH=200 HEIGHT=200></APPLET>

3. Компиляция исходного кода Java в машинный байтовый код при помощи компилятора javac. В результате трансляции создаются файлы с расширением.class (Hello.class).

4. Исполнение приложения:

1) Просмотр файла Hello.html с помощью WWW-навигатора, поддерживающего работу апплетов.

2) Либо использование программы просмотра апплетов appletviewer.exe.

Замечание. Для выполнения компиляции и запуска приложения можно создать командный файл (с расширением.bat) следующего содержания:

javac.exe Hello.java

appletviewer.exe Hello.html

Использование среды разработки JBuilder.

6. Создание нового Java-проекта с именем Hello (меню “File”, пункт “New Project”).

7. В диалоговом окне “Project Wizard” задаем имя проекта Hello.java в поле “Name”. Нажимаем кнопку “Finish”. В области “Project” появится дерево с именем проекта Hello.java.jpx.

8. Для добавления файла в созданный проект в контекстном меню выбираем “Add Files/Packages”. В диалоговом окне “Add Files or Packeges to Project” в закладке “Explorer” задаем имя файла Hello.java в поле “File name”. Файл Hello.java должен быть включен в проект Hello.

9. Двойной щелчок мыши по имени файла Hello.java в области “Project” открывает рабочую область файла, где в закладке “Sourse” вводится текст программы.

10. Для добавления HTML-файла в созданный проект в контекстном меню выбираем “Add Files/Packages”. В диалоговом окне “Add Files or Packeges to Project” в закладке “Explorer” задаем имя файла Hello.html в поле “File name”. Файл Hello.html должен быть включен в проект Hello.

11. Двойной щелчок мыши по имени файла Hello.html в области “Project” открывает рабочую область файла, где в закладке “Sourse” вводится текст HTML-файла.

12. Компиляция исходных текстов.

13. Для запуска приложения в области “Project” из контекстного меню файла Hello.html выбираем пункт “Run”.

1. Простейший апплет Hello

Исходный текст Java-файла простейшего апплета выглядит следующим образом:

/* ------------- Пример 1. Файл Hello.java -------------*/

import java.applet.*;

import java.awt.*;

public class Hello extends Applet

{

public void init()

{ resize(150,150);

}

public void paint(Graphics g)

{ g.drawString("Hello, WWW", 10, 20);

}

}/*-----------------------------------------------------------*/

Файл HTML-документа со ссылкой на апплет Hello должен содержать следующий код:

<!--.............. Пример 1. HTML-файл.............. -->

<html>

<head>

<title>Hello</title>

</head>

<body>

<applet code=Hello.class width=200 height=200></applet>

</body>

</html>

<!--........................................................................ -->

Теперь рассмотрим, из каких обязательных частей состоит апплет. Класс Hello, определенный в этом апплете, также является первичным классом, хотя он достаточно сильно отличается от первичных классов для простых приложений. Для обычной Java-программы необходимо было определить только один обязательный метод в первичном классе - метод main(). В первичном классе апплета необходимо определить как минимум два метода. Другие методы определяются в случае необходимости создания некоторых специальных эффектов.

Класс Hello определяется как public, а это значит, что он доступен для других объектов. Кроме того, явно установлен суперкласс класс Hello. Им является класс Applet (java.applet.Applet). Класс Applet должны расширять все апплеты, в том числе и класс Hello. Покажем иерархию классов (или дерево наследования) для апплетов:

Hello ® Aplet ® Panel ® Container ® Component ® Object

Класс Hello наследует данные и поведение класса Applet. Являясь подклассом класса Applet, класс Hello может считаться его более специализированным вариантом.

Большинство апплетов объявляет как минимум два метода: init() и paint(). Эти методы уже существуют в классе Applet, расширяемом всеми апплетами, включая и подкласс Hello. Объявление в подклассе метода с тем же самым именем, который есть и в суперклассе, заменяет метод суперкласса методом подкласса. Таким образом, происходит переопределение методов суперкласса с помощью специализированных версий этих методов подкласса.

Переопределяемый метод init() не имеет параметров, ничего не возвращает и объявляется открытым. Единственное, что делает в этом методе апплет Hello - это заставляет изменить размеры окна апплета. Метод resize() является методом класса Applet, поэтому можно использовать его и другие методы этого класса.

Вторым переопределяемым методом является paint(), который представляет собой подпрограмму, используемую для создания на экране изображения. Подобно методу init(), он объявлен открытым и ничего не возвращает. Но у него есть параметр, а именно - объект класса Graphics. Методами этого класса можно пользоваться для вывода графической информации в окно апплета.

Рассмотрим еще раз более систематизировано основные различия между первичным классом апплета и обычной Java-программы:

· Ни один из методов в первичном классе апплета не является статическим. Из этого можно сделать вывод, что этот класс должен быть в какой-то момент явным образом реализован (в отличие от первичного класса приложения). Но в тексте апплета Hello оператора реализации класса нет. Отсюда следует, что оболочка времени выполнения апплета, встроенная в WWW-броузер, сама реализует первичный класс апплета.

· Первичный класс апплета является расширением класса Applet (или подклассом Applet). Класс Applet включает в себя те функции, которые должен иметь каждый апплет.

· Если проверить выполнение апплета Hello, то видно, что оба включенных в первичный класс метода отработали несмотря на то, что код самого апплета не содержал явных вызовов этих методов. Это объясняется тем, что также, как и оболочка времени выполнения Java сама ищет и вызывает метод main() в первичном классе программы, оболочка времени апплета самостоятельно вызывает методы, входящие в подкласс Hello класса Applet.

Для более полного понимания принципа функционирования апплетов обратим особое внимание на последний пункт. В обычных приложениях оболочка времени выполнения вызывает метод main(), который вызывал остальные методы и реализовывал алгоритм программы. В отличие от этого, когда оболочка времени выполнения броузера запускает апплет, она прежде всего ищет и вызывает метод init(). Метод init() выполняет только служебные действия и не отвечает за работу всей программы. Метод же paint() вызывается самой системой всегда, когда содержимое окна требуется обновить. Например, если при работе в Windows окно броузера перекрыть окном другого Windows-приложения, то после того, как окно броузера снова откроется, система сразу же вызовет метод paint(), чтобы восстановить содержимое окна.

За исключением того факта, что оболочка времени выполнения броузера во время работы апплета сама вызывает методы, которые являются переопределениями методов стандартного класса Applet, первичный подкласс апплета ведет себя также, как и первичные классы простых приложения. В первичном классе апплета также можно определять новые методы (а не только переопределять методы, определенные в стандартном классе Applet), объявлять переменные и реализовывать новые классы.

1.1 Апплет Неllo, управляемый мышью

Класс Applet содержит большое количество методов, которые вызываются в ответ на действия пользователя (например, перемещение курсора мыши в пределах окна или нажатие определеннх клавиш на клавиатуре). Приведем в качестве примера использование метода mouseDown(), который вызывается каждый раз, когда пользователь в пределах области, занятой апплетом, нажимает левую клавишу мыши. Усовершенствованная программа Hello перерисовывает строчку текста в той точке, где пользователь щелкнул мышью.

/* ------------- Пример 2. Файл Hello.java -------------*/

import java.applet.*;

import java.awt.*;

public class hello extends Applet

{ int curX=50, curY=50;

public void init()

{ resize(640,480);

}

public void paint(Graphics g)

{ g.drawString("Hello, WWW",curX,curY);

}

public boolean mouseDown(Event e,int x,int y)

{ curX=x; curY=y;

repaint();

return true;

}

}/*-----------------------------------------------------------*/

Следует обратить внимание, что в методе mouseDown() вызывается метод repaint(). Этот метод сообщает оболочке времени выполнения, что необходимо обновить изображение в окне. В ответ на это оболочка времени выполнения предает параметры экрана, содержащиеся в объекте типа Graphics, методу paint().

2. Простейший апплет HelloApplet, созданный Java Applet Wizard

Для создания шаблона апплета, на основе которого можно разрабатывать специализированные апплеты, можно воспользоваться системой автоматизированной разработки шаблонов апплета Java Аpplet Wizard, встроенной в JBuilder.

2.1 Создание шаблона апплета HelloApplet

Для создания шаблона апплета HelloApplet (пример 3) среде разработки JBuilder выбрать пункт “New” меню “File”. В появившейся диалоговой панели “Object Gallery” выбрать закладку “Web” и отметить тип “Аpplet”. В диалоговом окне “Applet Wizard” в поле “Class” следует ввести имя HelloApplet и нажать кнопку “Finish”.

В результате работы системы Java Applet Wizard будет создано два файла с исходными текстами: текст апплета (файл HelloApplet.java) и HTML-документ (файл HelloApplet.html).

2.2 Исходные файлы апплета HelloApplet

Рассмотрим тексты создаваемых файлов (комментарии, создаваемые Java Applet Wizard, переведены в данном примере на русский язык). Тексты подобных шаблонных файлов содержатся в Приложении 1 и их можно в дальнейшем использовать в качестве шаблонов апплета.

Пример 3. Файлы, созданные Java Applet Wizard

Листинг Java-файла:

******************************************************************

// HelloApplet.java: Applet

//

//*****************************************************************

import java.applet.*;

import java.awt.*;

//================================================

// Основной класс для апплета HelloApplet

//

//================================================

public class HelloApplet extends Applet

{

// Конструктор класса HelloApplet

//--------------------------------------------------------------------------

public HelloApplet()

{

// Сделать: Добавьте сюда код конструктора

}

// ОБЕСПЕЧЕНИЕ ИНФОРМАЦИИ ОБ АППЛЕТЕ:

// Метод getAppletInfo() возвращает строку, которая описывает

// апплет. Здесь можно привести такую информацию, как имя

// автора и дата создания, а также любую другую информацию

//--------------------------------------------------------------------------

public String getAppletInfo()

{

return "Name: HelloApplet\r\n" +

"Created with JBuilder";

}

// Метод init() вызывается системой при первой загрузке или

// перезагрузке апплета. Можно переопределить этот метод

// для выполнения необходимой инициализации апплета, например

// инициализации структур данных, загрузки изображений и

// шрифтов, создания окон фреймов, установки системы

// управления внешним видом или добавления элементов

// пользовательского интерфейса

//--------------------------------------------------------------------------

public void init()

{

// Если для размещения в окне апплета органов управления

// используется класс "control creator", созданный системой

// ResourceWizard, из метода init() можно вызвать метод

// CreateControls(). Следует удалить вызов метода resize()

// перед добавлением вызова метода CreateControls(),

// так как эта функция выполняет изменение размера

// окна апплета самостоятельно

//----------------------------------------------------------------------

resize(320, 240);

// Сделать: Добавьте сюда код инициализации

}

// Здесь можно разместить дополнительный код, необходимый

// для “чистого” завершения работы апплета. Метод destroy()

// вызывается, когда апплет завершает работу и будет

// выгружен из памяти

//-------------------------------------------------------------------------

public void destroy()

{

// Сделать: Добавьте сюда код завершения работы апплета

}

// Обработчик процедуры рисования окна апплета HelloApplet

//--------------------------------------------------------------------------

public void paint(Graphics g)

{

g.drawString("Created with JBuilder ",10, 20);

}

// Метод start() вызывается при первом появлении на экране

// страницы HTML с апплетом

//--------------------------------------------------------------------------

public void start()

{

// Сделать: Добавьте сюда код, который должен

// работать при запуске апплета

}

// Метод stop() вызывается, когда страница HTML с

// с апплетом исчезает с экрана

//--------------------------------------------------------------------------

public void stop()

{

// Сделать: Добавьте сюда код, который должен

// работать при остановке апплета

}

// Сделать: Добавьте сюда код, необходимый для работы

// создаваемого специализированного апплета

}

Листинг HTML-файла:

<html>

<head>

<title>HelloApplet</title>

</head>

<body>

<hr>

<applet

code=HelloApplet.class

name=HelloApplet

width=320

height=240 >

</applet>

<hr>

<a href="HelloApplet.java">The source.</a>

</body>

</html>

Исходный текст апплета начинается с двух строк, в которых с помощью оператора import подключаются библиотеки классов.

Далее в исходном тексте апплета определяется класс типа public с именем HelloApplet, которое должно совпадать с именем файла, содержащего исходный текст этого класса.

Создавая файл HelloApplet.java, система Java Applet Wizard определила на в классе HelloApplet конструктор и несколько методов, заменив некоторые методы суперкласса Applet.

КонструкторHelloApplet() класса HelloApplet вызывается при создании объекта. По умолчанию тело конструктора, создаваемого системой Java Applet Wizard, не содержит никакого кода. Однако можно добавить в него строки, выполняющие инициализацию апплета при его создании как апплета.

Базовый класс Applet содержит определение метода getAppletInfo(), возвращающего null. В классе HelloApplet, который является подклассом по отношению к классу Applet, метод getAppletInfo() переопределяется так, что теперь он возвращает текстовую информацию об апплете в виде строки класса String.

Метод init() также определен в класса Applet, от которого наследуются все апплеты (определенный в суперклассе, этот метод ничего не делает). Метод init() вызывается тогда, когда WWW-навигатор загружает в свое окно документ HTML с тегом <APPLET>, ссылающимся на данный апплет. В этот момент апплет может выполнить инициализацию, например создать задачи, если он работает в мультизадачном режиме.

В переопределенном системой Java Applet Wizard методе init() по умолчанию вызывается метод resize(), определенный в суперклассе. При помощи этого оператора изменяются размеры окна апплета, установленные в параметрах тега <APPLET>. При желании редактировать размеры окна апплета через тег <APPLET> документа HTML можно удалить вызов метода resize() из метода init().

Перед удалением апплета из памяти вызывается метод destroy() (метод, обратный методу init()), определенный в классе Applet как пустая заглушка. Система Java Applet Wizard добавляет в исходный текст класса HelloApplet переопределение метода destroy(), в котором можно выполнить все необходимые операции, выполняющиеся перед удалением апплета. Например, если в методе init() создавались какие-либо задачи, то в методе destroy() их можно завершить.

Метод start() вызывается после метода init() в тот момент, когда пользователь начинает просматривать документ HTML со встроенным в него апплетом. Система Java Applet Wizard создает заглушку, переопределяющую метод start() из суперкласса. Этот метод можно модифицировать, если при каждом посещении пользователем страницы с апплетом необходимо выполнять какую-либо инициализацию.

Обратным методу start() является метод stop(). Он вызывается, когда пользователь покидает страницу с апплетом и загружает в окно навигатора другую страницу. Этот метод вызывается перед вызовом метода destroy(). Метод stop(), переопределенный в классе HelloApplet можно дополнить кодом, который должен работать при остановке апплета.

Метод paint() выполняет рисование в окне апплета. Определение этого метода находится в классе java.awt.Component. Так как класс Applet является подклассом класса Component (см. иерархию классов апплетов), а класса HelloApplet - подклассом Applet, то метод paint() можно переопределить в классе HelloApplet.

Метод paint() вызывается, когда необходимо перерисовать окно апплета. Перерисовка окна апплета обычно выполняется асинхронно по отношению в работе апплета (подобно перерисовки клиентской части окон Windows-приложений при поступлении сообщения WM_PAINT). В любое время апплет должен быть готов перерисовать содержимое своего окна.

Методу paint() в качестве параметра передается ссылка на объект класса Graphics. По своему смыслу этот объект напоминает контекст отображения, который используется для вывода информации в Windows-окно. Контекст отображения - это как лист бумаги, на котором можно рисовать изображение или выводит текст. Многочисленные методы класса Graphics позволяют задавать различные параметры вывода, такие, например, как цвет или шрифт.

Для вывода изображения апплеты используют координатную систему, которая соответствует режиму MM_TEXT - одному из режимов, использующихся при программирование для Windows. Начало этой системы координат расположено в левом верхнем углу окна аплета, ось X направлена слева направо, а ось Y - сверху вниз.

2.3 Упрощенный вариант исходного текста апплета HelloApplet

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

******************************************************************

// HelloApplet.java: Applet

//

//*****************************************************************

import java.applet.*;

import java.awt.*;

//================================================

// Основной класс для апплета HelloApplet

//

//================================================

public class HelloApplet extends Applet

{

// Обработчик процедуры рисования окна апплета HelloApplet

//---------------------------------------------------------

public void paint(Graphics g)

{

g.drawString("Created with JBuilder ",

10, 20);

}

}

В представленном фрагменте удалены методы, не выполняющие никакой полезной работы, а также методы getAppletInfo и init(). Апплет HelloApplet будет при этом работать также как и раньше, потому как удаленные методы все равно определены в суперклассе Applet, Система Java Applet Wizard создает пустые переопределения методов только для того, чтобы при необходимости их можно было заполнить какими-нибудь полезными действиями.

Однако метод paint() переопределить нужно в любом случае, так как именно в нем выполняется рисование - специализированная часть работы апплета HelloApplet.

3. Аргументы апплета

Получение аргументов командной строки простых приложений происходит через параметр метода main() первичного класса приложения. Но как же происходит передача аргументов командной строки апплетам?

3.1 Передача параметров апплету

Аргументы командной строки передаются апплетам во время запуска и происходит при помощи специально созданных атрибутов апплетов. Эти атрибуты параметров апплетов (или проще - параметры апплетов) определяются в HTML-теге <APPLET> и предоставляют соответствующую информацию же самому апплету.

Параметры апплетов следуют после открывающего тега <APPLET> и перед закрывающим тегом </APPLET>. Они определяются как пары, состоящие из двух опций - NAME (имя) и VALUE (значение), внутри тегов <PARAM>, например как этом примере HTML-документа:

<applet code=Hello.class width=200 height=200>

<param name=first value="Hello!">

<param name=second value="How are you?">

<!-- Здесь можно расположить альтернативный текст,

выводящийся в окнах навигаторов, не поддерживающих

работу апплетов -->

</applet>

В этом примере параметру first присваивается значение "Hello!", а параметру second - значение "How are you?". Для того, чтобы получить значения этих параметров в апплете, необходимо использовать метод getParameter(), определенный в классе Applet, например:

String firstParam=getParameter("first");

String secondParam=getParameter("second");

Теперь переменные firstParam и secondParam содержат строки "Hello!" и "How are you?" соответственно.

Поскольку метод getParameter() всегда возвращает строковые объекты, то необходимо помнить, что все параметры апплетов, даже числовые, являются строками. Это очень важно, поскольку перед использованием этого параметра как числа необходимо его сначала получить как строку, а затем перевести строку в число. Например, если параметр задан в HTML-файле следующим образом:

<param name=loop value="5">

то для получения численного значения параметра необходимо использовать следующий код (или подобный ему)

String loopString=getParameter("loop");

int loopInt=Integer.valueOf(loopString).intValue();

3.2 Апплет, принимающий параметры

Создадим шаблон апплета AppletWithParam (пример 4), который имеет возможность обрабатывать параметры.

Для того, чтобы апплет принимал параметры, при создании апплета с помощью системы Java Applet Wizard в четвертой диалоговой панели необходимо определить параметры, передаваемые апплету.

Первоначально список параметров пуст, для того чтобы добавить новый параметр, нужно в столбце “Name” ввести имя параметра. Для апплета AppletWithParam следует добавить параметры с именами String_1 и String_2.

В столбце “Member” при заполнении списка параметров отображаются имена полей класса AppletWithParam, в которые можно будет записать значения параметров (при помощи метода getParameter()). Значения столбца “Def-Value” используются для инициализации соответствующих полей класса. Следует задать в этих полях строки “First string” и “Second string” соответственно.

Для описания параметров служит столбец “Description”. Апплет может извлечь эту информацию методом getParameterInfo() и проанализировать.

Рассмотрим тексты созданных файлов. Тексты подобных шаблонных файлов содержатся в Приложении 2 и их можно в дальнейшем использовать в качестве шаблонов апплета, принимающего значения.

Пример 4. Файлы, созданные Java Applet Wizard

Листинг Java-файла:

//***************************************************************

// AppletWithParam.java: Applet

//

//***************************************************************

import java.applet.*;

import java.awt.*;

public class AppletWithParam extends Applet

{

// ПОДДЕРЖКА ПАРАМЕТРОВ АППЛЕТА

//--------------------------------------------------------------------------

// Поля класса для хранения значений параметров

// Создаются автоматически для параметров апплета

// Поля инициализируются значениями по умолчанию из таблицы

// <type> <MemberVar> = <Default Value>

//--------------------------------------------------------------------------

private String m_String_1 = "First string";

private String m_String_2 = "Second string";

// Имена параметров, нужны для функции getParameter

// Создаются автоматически для параметров апплета

//--------------------------------------------------------------------------

private final String PARAM_String_1 = "String_1";

private final String PARAM_String_2= " String_2";

//--------------------------------------------------------------------------

public AppletWithParam()

{

// Сделать: Добавьте сюда код конструктора

}

//--------------------------------------------------------------------------

public String getAppletInfo()

{

return "Name: AppletWithParam\r\n" +

"";

}

// ПОДДЕРЖКА ПАРАМЕТРОВ

// Метод getParameterInfo() возвращает ссылку на

// массив с описаниями параметров в виде

//{ "Name", "Type", "Description" },

//--------------------------------------------------------------------------

public String[][] getParameterInfo()

{

String[][] info =

{

{ PARAM_String_1, "String", "Parameter description" },

{ PARAM_String_2, "String", "Parameter description" },

};

return info;

}

//--------------------------------------------------------------------------

public void init()

{

// ПОДДЕРЖКА ПАРАМЕТРОВ

// Чтение всех параметров и запись их значений в

// соответствующие поля класса

//----------------------------------------------------------------------

String param;

// Параметр с именем String_1

//----------------------------------------------------------------------

param = getParameter(PARAM_String_1);

if (param!= null) m_String_1 = param;

// Параметр с именем String_2

//----------------------------------------------------------------------

param = getParameter(PARAM_String_2);

if (param!= null) m_String_2 = param;

//----------------------------------------------------------------------

resize(320, 240);

// Сделать: Добавьте сюда код инициализации




Поделиться с друзьями:


Дата добавления: 2014-11-20; Просмотров: 489; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.156 сек.