Введение в OpenTooIs API

И

Нтерфейс программирования приложений OpenTools APl позволяет вносить изменения в поведение JBuilder. Создавая OpenTool-инструмент, вы, в сущнос­ти, становитесь членом команды разработчиков JBuilder. Теперь продукт делает не только то, что желала компания Borland. Теперь у него также появились и новые функции, которые вы создали самостоятельно.

Как вы увидите из материала этой главы, добавить OpenTool-инструмент к интег­рированной среде разработки очень просто. Все, что вам надо — это поместить один единственный JAR-файл в нужный каталог. В большинстве случаев таким каталогом будет JbIibExt.

Более того, существует достаточно разветвленная сеть разработчиков, занимаю­щихся созданием OpenTool-расширений к IDE-среде. В результате, существует по­стоянно растущий набор OpenTool-инструментов, которые можно приобрести, и та­ким образом добавить новые функции в JBuilder IDE. Многие из этих OpenTool-ин — струментов являются бесплатными.

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

Что позволяет делать OpenTooIs API

На примере вам, возможно, будет легче понять значение OpenTools API. Один из первых компонентов OpenTools API, который я увидел и который привлек мое вни­мание, называется GetSetCreator. Этот OpenTool-инструмент позволяет автомати­чески создавать средства просмотра и изменения значений отдельных переменных. Рассмотрим, например, следующий простой класс:

Public Class SanipleClass

{

Int Foo;

Public SaxnpleClassO

I

)

}

Если, после того, как был установлен GetSetCreator, Вы наведете курсор на идентификатор Foo и нажмете комбинацию клавиш Alt+G, то произойдет автома­тическая вставка средств просмотра и изменения значения переменной. Результа­том будет почти мгновенная трансформация кода SampleClass В код, который выг­лядит приблизительно так:

Package untitled4;

Public class SampleClass extends Object

<

Int Foo;

Public SampleClassO <

}

Public int getFoo()

{

Return this. Foo;

I

Public void setFoo(int foo)

{

This. Foo = Foo;

)

}

He приходится и говорить о том, что этот инструмент исключительно полезен и представляет собой важное расширение к интегрированной среде разработки. Боль­ше информации об этом OpenTool-инструменте можно получить на сайте CodeCentral ПО Адресу Http://Codecentral.Borland.Com/Codecentral/Ccweb.ExeAuthor7Authorid=63550.

Создание простого OpenTool-πpoeκτa

Теперь пришло время приступить к созданию собственного OpenTool-инстру- мента. Синтаксис, используемый при создании OpenTool-инструментов, является довольно простым. Тем не менее, существует несколько принципов, которые нам следует рассмотреть, прежде чем можно будет приступить к добавлению требуемых функций к JBuilder IDE. Эта глава описывает основные этапы, которые необходимо усвоить, дабы правильно добавлять код к JBuilder.

Добавление простого OpenTool-инструмента, основанного на командной строке

Для начала я покажу вам, как создавать достаточно простой OpenTool-инстру- мент. Этот инструмент запускается из командной строки, когда вы запускаете JBuilder. В частности, если вы укажете специальный параметр, определяемый вами, JBuilder не станет запускать Borland IDE, а вместо этого выведет строки стихотворе­ния, как показано в листинге 32.1.

Листинг 32.1. Выходные данные нашего OpenTool-инструмента,

Вызванного с параметром — MyOpenTooI

Copyright (С) 1996-2001 Borland Software Corporation. All rights

Reserved-

Я помню чудное мгновенье:

Передо мной явилась ты.

Как мимолетное виденье,

Как гений чистой красоты.

В томленьях грусти безнадежной,

В тревогах ыумдрй суеты

Звучал мне долго голос нежный

И снились милые черты.

Простим разработчиков JBuilder за то, что они не предвидели, что некоторые люди могут использовать их продукт в качестве средства для вывода стихотворений Александра Сергеевича Пушкина. Вместе с тем, мы можем поблагодарить их за TQ, Что они сделали возможным добавление функций подобного рода, используя OpenTools API, если это вдруг оказывается необходимым.

Работа с командным интерфейсом

Чтобы создать OpenTool-инструмент, основанный на работе в командной строке и вдохновленный Александром Сергеевичем Пушкиным, первым делом нужно реа­лизовать экземпляр командного интерфейса Com.Borland.Primetime:

Package Сот.borland. primetime;

∕∕ Импорт

Import java. io. PrintStream; public interface Command <

∕∕ Методы

Void PrintCommandHelp(PrintStream parml);

String getCommandDescription(); void invokeCommand(String[] parml); boolean takeSCommandArguments();

1

Этот интерфейс является ключом к встраиванию в JBuilder OpenTool-инструмен — та, основанного на работе в командной строке. В большинстве OpenTool-инстру- ментов, основанных на работе с графическим интерфейсом пользователя (GUI), вы не будете использовать эти методы. В действительности, вы увидите, что при созда­нии OpenTool-инструментов, основанных на работе с GUI-интерфейсом, синтаксис является даже более простым, чем синтаксис OpenTool-инструментов, основанных на работе в командной строке. Однако при создании инструментов, основанных на работе с GUI-интерфейсом, есть другие сложности, из-за которых я рещил, утр про­ще будет начать с примера, ориентированного на командную строку.

Методы командного интерфейса разрабатывались преимущественно для того, чтобы помочь В Выполнении простых задач, общих для инструментов, основанных на работе в командной строке. Например, они позволяют выводить вспомогатель­ные строки и краткие описания OpenTool-инструмента. В следующих нескольких абзацах будет показана каждая из этих опций работы с командной строкой.

Метод InvokeCommand Запускает ваш OpenTool-инструмент. Как только ваш про­ект был откомпилирован, вы можете вызвать команду, передав в JBuilder параметр MyOpenTool, Как показано в листинге 32.1:

JBuilder.ExeMyOpenTool

Команда MyOpenTool Является настраиваемой и должна быть определена разра­ботчиком. Я покажу, как определять команду позже в этой главе, в разделе "Регист­рация OpenTool-инструмента".

Как показано В Листинге 32.2, ВЫЗОВ GetCommandDescription ПРОИСХОДИТ при Передаче в JBuilder параметра -help:

JBuilder.ExeHelp

Листинг 32.2. Выходные данные getCommandDescription, полученные в результате вызова OpenTool-инструмента с параметром — help

Е:JbBinJBuilder. exe — help

JBuilder 7 Enterprise

Licensed to Charlie Calvertf Elvenware

Copyright (c) 1996-2001 Borland Software Corporation.

All Rights Reserved.

Существующие параметры командной строки:

MyOpenTool : Вывести несколько строк стихотворения А. С. Пушкина Build : Скомпоновать JBuilderПроект

Hello Вывести приветствие

Help : Вывести справху по параметрам командной строки

Info Вывести информацию по конфигурации

License : Вывести диспетчер лицензий

Nosplash : Запретить вывод экрана заставки

Treefont : Установить размер шрифта, используемый в деревьях в IDEVerbose Вывести информацию по загрузке OpenTool-инструментов

PrintCommandHelp выводит справочную информацию по нашему JBuilder-инст­рументу, как показано в листинге 32.3:

JBuilder. exe — help MyOpenTool

Листинг 32.3. Выходные данные printCommandHelp, полученные в результате вызова OpenTool-инструмента с параметром Help MyOpenTooI

E:\jb\bin\JBuilder. exe -help MyOpenTool.

JBuilder 7 Enterprise

Licensed to Charlie Calvert, Elvenware

Copyright (c) 1996-2001 Borland Software Corporation.

All rights reserved.

-MyOpenTool Послушайте A. C. Пушкина.

Четвертым методом командного интерфейса является указание булевого значе­ния, отвечающего за то, принимает ли данный OpenTool-инструмент какие-то пара­метры. Во всех примерах этой главы данное значение будет равно False.

Как вы увидели, в командном интерфейсе существует четыре метода Вы найде­те, что каждый из этих методов очень прост в реализации. Более того, методам при­своены весьма удобные имена. Я полагаю, что для них не требуется больше объясне­ний, нежели я привел здесь. Вы сможете найти полную реализацию интерфейса в листинге 32.4. Объяснения относительно того, как создать код, приведены ниже в этой главе.

Листинг 32.4. Простая реализация командного интерфейса

Import Com.Borland.Primetime.*;

Import java. io. Printstream ;

Public class NewCommand implements Command {

∕**

Булева функция, определяющая, следует ли принимать аргументы */ Public Boolean TakesCommandArguments()

{

Return false;

}

∕** Реализация OpenToolИнструмента */ public void InvokeCommand(String[] args)

{

String S =

"Я помню чудное мгновенье:N" +

"Передо мной явилась ты.\п" +

"Как мимолетное виденье,\п" +

"Как гений чистой красоты.\п" +

"В томленьях грусти безнадежной,\п" +

"В тревогах шумной суеты\п" +

"Звучал мне долго голос кежный\п" +

"И снились милые черты.\п";

System. out. println(S);

System. exit(О);

)

∕** Вызывается Командной JBuilder -help */ public

String getCommandDescription() {

Return

"Вывести несколько строк стихотворения А. С. Пушкина."; }

/** Вызывается Командой JBuilder -help MyOpenTool */ Public void printCommandHelp(PrintStream printstream)

(

Printstream.Println("Послушайте A. C. Пушкина.");

}

B листинге 32.4 показан почти весь исходный код OpenTool-инструмента. Чтобы он стал частью интегрированной среды разработки, вам лишь нужно добавить еще один метод, состоящий из двух строк, который регистрирует реализованный вами код. Описание этого метода дано в следующем разделе.

Регистрация OpenTool-инструмента

Следующим шагом после создания класса для OpenTool-πpoeκτa будет создание кода, который зарегистрирует его в JBuilder. Поместите свой новый класс в текущий пакет, и пусть ваш класс сам расширит класс Object По умолчанию. Вам потребует­ся добавить в этот класс еще один метод, называющийся InitOpenTool. Этот метод создает экземпляр класса, который определяет новый OpenTool-инструмент, а затем передает ЭТОТ Класс В Статический метод С Именем PrimeTime.RegisterCommand.

примечаниеИмя PrimeTime было кодовым названием для первой версии JBuiIder. В память о первой версии это имя попало в иерархию объектов проекта.

Как показано в листинге 32.5, RegisterCommand Принимает два параметра. Пер­вым параметром является имя, которым вы хотите назвать свою команду. Этим име­нем будет слово, которое вы передадите в JBuilder, когда захотите вызвать коман­ду из командной строки. Вторым параметром является класс, который определя­ет ваш OpenTool-инструмент. Обратите внимание на то, что ваш класс является потомком класса Command, Поэтому вызываемый нами метод и носит название RegisterCommand.

Листинг 32.5. Класс RunOpenTooI содержит метод InitOpenTooIl который нужен при создании OpenTool-инструмента, основанного на работе в командной строке

Package myopentools; /**

* title:
* description:
* copyright:
* company:
* sauthor
* sversion
My Open Tools Базовая Структура Copyright (c) 2001

Elvenware Charlie Calvert 1.0

opentool-инструментов*/
itπpor t c<3ta. bor land. primetime. * ;
public class runopentool i
∕**Bo Всея OpenTool-HHCTpyMeriTax Должен Быть Реализован Метод InitOpenTool*/
pιfbllc static void InitOpenTool ( byte majorVersion, byte OiinorVersion )

{

∕∕ Создание Экземпляра Класса, Реализупцего OpenToolИнструмент MyOpenTool command = new MyOpenTool();

// Регистрация OpenToolИнструмента В JBuilder PrimeTime. registerCommand (»MyOpenTool" , command) ;

Имя, которое вы даете классу в первом параметре метода RegisterCommand, Мо­жет быть любым, каким вы только захотите. Однако вам следует запомнить это имя, поскольку оно будет фигурировать при создании JAR-файла, содержащего вновь разработанный OpenTool-инструмент. Более того, вам нужно будет указывать это имя при запуске OpenTool-инструмента из командной строки. Обратите внимание НЯ То, что в вашем OpenTool-πpoeκτe нет главного метода, нет кода аплета, нет ниче­го, кроме двух простых классов. Эти классы принадлежат собственно JBuilder. Вы только лишь пишете расширение к JBuilder. Весь JBuilder написан на Java, и вы лишь добавляете свой Java-код к этому продукту. Таким образом, вы становитесь фактическим членом команды разработчиков JBuilder. (Тем не менее, я бы пореко­мендовал вам проявить некоторую сдержанность и не отражать сей факт в своем ре­зюме.)

На этом этапе вам уже известно все, что нужно, о написании кода ядра простого OpenTool-приложения, запускающегося из командной игроки. Теперь давайте обра­тимся к теме разработки OpenTool-инструментов в JBuilder IDE.

Использование JBuiIder IDE для создания OpenTool-инструментов

Я представил вам код, который необходимо написать для того, чтобы создать OpenTooI-инструмент. Однако я, в действительности, не сказал, какие шаги нужно сделать для того, чтобы создать OpenTooI-инструмент в самом JBuilder. Многие из этих шагов, скорее всего, должны быть очевидными, но, тем не менее, я бы хотел их конкретизировать, поскольку они отличаются от тех шагов, которые требуется вы­полнить при создании аплетов и приложений.

1 Выберите в меню пункт File ∣ New и создайте новый проект с названием MyOpenTooIs. Значения остальных параметров на первой странице мастера ос­тавьте без изменений.

2. На второй странице мастера проектов Project Wizard выберите пункт Required Libraries ∣ Add. Появится диалоговое окно. В этом диалоговом окне выберите пункт JBuiIder ∣ Open Tools SDK и щелкните на кнопке OK. Теперь в разделе Required Libraries (Требуемые библиотеки) должен появиться пункт Open Tools SDK. Работа с мастером проектов завершена, поэтому можно щелкнуть на кнопке Finish.

3. Теперь наступило время реализовать класс, который будет сердцем вашего OpenTool-инструмента. Выберите в меню пункт File ∣ New и создайте не новое приложение или аплет, а новый класс. Назовите его MyOpenTooI. Он должен расширять Com. Bor Land, Prime Time. Command. Вы можете либо напечатать это имя в окне списка, либо отыскать имя в списке классов. Чтобы выбрать имя класса из списка классов, нажмите для базового класса кнопку эллипсиса и выберите Com ∣ Borland ∣ primetime ∣ Command. Щелкните на кнопке OK. Пос­ле этого должно появиться диалоговое окно, показанное на рис. 32.1. (Опция выбора класса не будет доступна, если вы не добавите в список необходимых библиотек OpenTools SDK, как описывалось в шаге 2.)

4. fcreatbaiww jaactasafill (г ih i fiβldβ below to s« the package, пая base close, end other options tor the java ctasewhich will be createdctfwsmtofrnaooft
packsaei ^myopentools
clfbs name: ∣myopentool
bgse claes: jcomaoriand primetime command
opaons
fep⅛wte
t generaterftatft mmhod
(v generateheadertommeiits
l' ййжгаша; мю ⅛⅝s⅛> я»
f ⅝erτid* abstract mrβ∙odfЩелкните на кнопке OK. Код, показанный в листинге 32.6, будет автомати­чески вставлен в редактор.

Рис. 32.1. Создание главного класса для Open Tool-проекта

Листинг 32.6. Код OpenTool-πpoeκτa создается JBuiIder IDE автоматически package my opentooIs;

Inɪpor t com. borland. prime time. Command;

Import j ava. io. PrintStream;

∕**

* Title: MyOpenTools

* Description: Демонстрационная версия

* Copyright: Copyright (c) 2001

* Company: Elvenware

* Sauthor Charlie Calvert

* Sversion 1.O */

Public class MyOpenTool implements Command { public MyOpenToolO {

}

Public void prIntCommandHelp(PrintStream parml)

{

∕**Stodo: Implement this com. borland. primetime. Command method*/

Throw new java. Iang. UnsupportedoperationException(

"Method PrintCommandHelp() not yet implemented.");

)

Public String getCommandDescription()

{

∕**gtodo: Implement this com. borland. primetime. Command method*/

Throw new java. Iang. UnsupportedpperationException(

"Method getCommandDescription() not yet implemented.");

}

Public void InvokeCommand(String[] parml)

{

∕**βtodo: Isplement this com. borland. primetime. Command method*/

Throw new j ava. Iang. UnsupportedoperationException(

"Method InvokeCommand () not yet implemented.,*) ;

J

Public boolean takesComsιandArguments ()

{

∕**θtodo: Implement this com. borland. primetime. Command method*/

Throw new j ava. Iang. UnsupportedoperationException(

"Method takesComπιandArguments () not yet implemented. ") ;

примечаниеПосле того как вы проделаете все описанные выше шаги, будет достаточно про­сто вписать свой код, чтобы он выглядел, как показано в листинге 32.4. Обратите внимание на то, что все остальное JBuilder сделал самостоятельно.

Вспомните, что в коде, который создает JBuiIder, символы Stodo появля­ются в верхней части панели структуры, todo-сообщения являются главной опорой в Моей повседневной работе в интегрированной среде разработки JBuiIder.

Также вам понадобится добавить в проект класс для регистрации OpenTool-инст- румента в методе InitQpenTool. Этот второй класс был описан выше, в разделе "Ре­гистрация OpenTool-инструмента". Чтобы создать этот класс, выберите в меню пункт File ∣ New Class. Класс следует поместить в текущий проект и реализовать, как показано в листинге 32.5.

Запуск простого OpenTool-πpoeκτa

Теперь, когда в IDE-среде был подготовлен весь код проекта, следующим шагом будет запуск кода на выполнение. Существует три различных способа это сделать, и каждый из них я время от времени нахожу полезным:

■ Используйте сборщик архивов (JBuilder Archive Builder) для того, чтобы со­здать JAR-файл, который затем можно поместить в каталог JbIibEχt.

■ Если вы не располагаете версией JBuilder, в которую включен Archive Builder, вы можете создать JAR-файл самостоятельно в командной строке. Когда все готово, разместите полученный JAR-файл в каталоге JbLibEχt.

■ Третий способ заключается в том, чтобы запустить OpenTool-инструмент из файлов необработанных классов в каталоге, в котором он был создан. Этот ва­риант не является хорошим выбором при вводе OpenTool-инструмента в дей­ствие, тем не менее, он может оказаться полезным в ходе его разработки.

примечаниеКаждый из перечисленных здесь вариантов более подробно описан в следующих четырех подразделах. Я предлагаю вам внимательно прочитать эти разделы, так как информация в каждом из этих разделов может принести пользу в будущем. Более того, я считаю, что каждый из способов обладает своими преимуществами и недо­статками. Как результат, я пользуюсь всеми тремя методами, то одним, то другим, в зависимости от требований выполняемой задачи. Независимо от того, какой метод вы выберете, обязательно прочитайте первый из следующих четырех разделов, "Файл classes. opentools". В этом разделе объясняется наиболее сложный этап созда­ния OpenTool-инструмента. Эта информация относится ко всем трем последующим разделам

Архив является обычным JAR-файлом. JAR-файлы представляют собой средство упаковки нескольких файлов в один. Этот файл может быть сжатым, и обычно так оно и есть. По сути, JAR-файл — это вариант zip-, tar-, cab-файла, либо какой-то дру­гой технологии сжатия из числа тех, которые появлялись и исчезали в последние годы. Многие программы сжатия (WinZIP и другие) легко открывают JAR-файлы.

Файл Classes. opentools

Процесс запуска OpenTool-инструмента на выполнение в целом достаточно прост, за одним лишь исключением. Единственная трудность связана с созданием и вводом в действие загадочного файла под названием Classes.Opentools. Вы столк­нетесь с необходимостью создания этого файла независимо от того, какой из трех методов вы выбрали для ввода в действие создаваемого OpenTool-инструмента.

Файл Classes. Opentools Является файлом манифеста. Манифесты — это обыч­ные текстовые файлы, которые находятся внутри JAR-файла и назначение которых заключается в описании содержимого файла. Обычно манифест указывает на то, ка­кой из файлов, входящих в JAR-архив, должен быть вызван для запуска приложе­ния, хранящегося в JAR-файле. Он определяет имя и месторасположение файла главного класса в библиотеке.

Вам придется написать содержимое файла манифеста самостоятельно. Ниже приведена та строка, которую необходимо внести в этот файл:

OpenToolsCore: MyopentooIs.RunOpenTool

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

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

Строка кода, записанная в файле Classes, Open Tools, Указывает на то, что метод регистрации для нашего OpenTooI-инструмента находится в пакете Myopentoois, В классе с именем RunOpenTooi. Пожалуйста, обратите внимание на то, что эта строка вызывает файл класса, который Регистрирует ваш OpenTool-инструмент, а не факти­ческую Реализацию OpenTooI-инструмента. В частности, здесь указана ссылка на RunOpenTool.Class, А не на MyOpenTool.Class. Конечно же, не нужно включать расширение ".Class" В файл-манифест, как это расширение не включается и при вызове из командной строки Java.Exe.

Следует еще сказать несколько слов об имени файла Classes, Open Tools:

■ Расширение .Opentools Определяется JBuilder и должно быть неизменным во всех OpenTool-πpoeκτax. Оно является флагом, по которому JBuilder опре­деляет, действительно ли он имеет дело с OpenTool-инструментом.

■ Часть имени Classes В этом файле указывает на каталог, в котором находится ваш OpenTool-инструмент. Помните, что при установке JBuilder по умолча­нию, ваши OpenTool-инструменты будут находиться в каталоге с именем Classes. В частности, ваш код находится в каталоге Classes В пакете/катало — ге с именем Myopentoois. Имя Myopentoois, Как вы помните, определено в тексте файла Classes. opentools

OpenTool-инструменты и Archive Builder

Для того чтобы с помощью Archive Builder создать JAR-файл для OpenTool-πpo — екта, для начала откройте в JBuilder свой OpenTool-проект. Выберите в меню пункт Wizards ∣ Archive Builder (эта функция доступна не во всех редакциях JBuilder).

Для типа архива установите OpenTooI и щелкните на кнопке Next, чтобы перейти на шаг 2 мастера. Если хотите, можете оставить все установки по умолчанию, либо указать имя для своего JAR-файла, например MyOpenTooI. Правильно заполненное диалоговое окно показано на рис. 32.2.

На всех остальных страницах оставьте значения по умолчанию. Следует обратить особое внимание на то, что на шаге 4 мастера для OpenTools SDK указано Exclude All (Исключить все), как показано на рис. 32.3. На шаге 5 отметьте флажок Include а manifest in the archive (Включить манифест в архив) и выберите опцию Override the manifest with the specified file (Заменить манифест указанным файлом), как показано на рисунке 32.4. Щелкните на кнопке Finish.

ardifve bojwer * t⅛tep 2 of s,рис. 32.2. можно, хотя и не обязательно, указать имя для архива,spechv the fve tube стudeo by ihs κchwno process
tbe wtzκd wib use die settnqs on this ano subsequent oases to treat» hnewprotednedethetfepresentetbe srchtvtnb process, vou tan tnange arcnmng sβmπqs at any time bv drtnqing tip 8« properties satofl item the archive node's content menu. opentooi ~ *γ
,рис. 32.3. проверьте, что выбрана опция never include any classes or resources (никогда не включать классы или ресурсы),5√ anhtve bialder step 4 of 5,pe⅛⅛<ntoew^t6-<ιβ⅛□h vtivy wvtivnvm
tbehlkaries ικeβ⅛wsprojedpre itstadbaiow 8a⅛dlhe κmwl* jeptwbtemeearasvrareedione
,∙⅛⅛ 1 l⅛d s g,w*> 1 centet 1 h⅜> i,-wksfekiinet
f neyw mttude any classesorresotfftes
,г tndude {squired ctoesas mmtahresmikm always hkluoe «в oassas ало resources,рис. 32.4. убедитесь, что вы включили файл манифеста и переопределили манифест при помощи своей собственной версии файла classes, opentools,itoolszciassesopentoois

По окончании создания архива ваш проект будет автоматически содержать пус­той файл с именем Classes. opentools Вам должны будете заполнить этот файл, как описано выше.

Теперь, когда мы выполнили всю самую грязную работу, можно скомпоновать проект, чтобы создать JAR-файл. По умолчанию, ваш JAR-файл будет создаваться заново каждый раз, когда вы будете выбирать в меню пункт Build. Скопируйте JAR — файл в каталог. .∕jb∕iib∕eχt или эквивалентный ему каталог в своей системе. Зай­дите в каталог. .∕jb∕bin. Теперь запустите JBuilder из командной строки, передав ему параметр — help. Команда, которую вам необходимо ввести, имеет следующий

примечаниеВид: JBuilder. exe — help. Вы должны будете увидеть выходные данные от реализа­ции метода GetCommandDescription, Как показано в листинге 32.2. Чтобы выпол­нить эту проверку, вам не нужно выходить из текущей версии JBuilder.

JBuiIder может использовать ваш JAR-файл, если он был открыт, когда была запущена IDE, и потому вам может понадобиться закрыть IDE-среду, дабы избежать конфликта использования файла при попытке удаления или замены JAR-файла. Если у вас возникало сообщение типа "cannot access this file because it is being used by another process" ("невозможно получить доступ к файлу, поскольку Он используется другим процессом"), так вот, это и есть лекарство от него.

Если после того, как вы вызвали справку по JBuilder, вы не видите никакого тек­ста, попробуйте запустить JBuilder с включенной опцией -verbose: JBuilder. exe — help — verbose. После этого должно появиться более подробное описание того, что произошло.

Прочие методы отладки включают изучение нескольких OpenTool-проектов, вхо­дящих в состав сопровождающих книгу материалов или же в состав компакт-диска с дистрибутивом JBuilder. Вы можете сравнить то, что находится в упомянутых мате­риалах, с тем, что написали вы. В частности, найдите проект с именем MyOpenTools И проверьте, соответствует ли ваш проект, хотя бы в общем, тому, что имеется в ма­териалах

При отладке своего кода обратите внимание на то, что в IDE вы можете сделать двойной щелчок на созданном вами архиве. Если вы сделаете это, архив откроется. Выполните двойной щелчок на JAR-файле. После этого в панели структуры должны появиться файлы классов и манифеста. Проверьте, все ли файлы являются коррект­ными. В нашем примере вы должны увидеть два файла классов: MyOpenTooi. class И RunOpenTool. class. Оба эти файла должны находиться в пакете Myopentoois. Манифест должен выглядеть следующим образом:

Manifest-Version: 1.0

примечаниеOpenTools-Core: myopentoois. RunOpenTool

Если вы чувствуете, что установили какие-либо настройки в ArchiveBuiIder неправильно, всегда есть возможность изменить их. Для этого нужно сде­лать щелчок правой кнопкой мыши на узле Archive в панели проекта и выбрать из кон­Текстного меню пункт Properties.

В следующем разделе этой главы мы рассмотрим второй способ просмотра со­держимого JAR-файла.

Создание JAR-файла OpenTool-инструмента в командной строке

Если вы не располагаете редакцией SE или Enterprise, тогда вам не будет досту­пен сборщик архивов Archive Builder. Для разработки проекта это не является серь­езной помехой. Все, что вы должны сделать, — это создать JAR-файл вручную. Я считаю, что это весьма полезный способ создания JAR-файла, поскольку он легко автоматизируется при помощи сценариев. В первую очередь, скопируйте файл Classes. opentools И поместите его в корневой каталог своего проекта (т. е. помес­тите его ниже каталогов Src И Classes). Как вы помните из предыдущего раздела, в

Файле classes. opentools должна присутствовать следующая строка, в конце кото­рой должен быть вставлен переход на следующую строку:

OpenTools-Core: myopentools. RunOpenTool

Ниже написан тот код, который вы можете напечатать в командной строке, что­бы создать свой JAR-файл:

Jar — cfm MyOpenTools. jar classes. opentools — C classes myopentools

Первое слово этой команды вызывает утилиту jar. exe. Утилита jar. exe нахо­дится в каталоге bin пакета Java SDK Этот каталог обязательно должен быть вклю­чен в переменную path операционной системы, иначе вы не сможете вызвать коман­ду. Запустите утилиту jar. exe без параметров, чтобы изучить различные ключи, ко­торые можно ей передавать. Например, "с" Означает создание, ,,f∙, означает, что вы собираетесь передать имя JAR-файла, а "т" Указывает на то, что вы хотите включить в пакет файл манифеста

После этого вы можете проверить содержимое JAR-файла, введя следующую ко­манду:

Jar tf MyOpenTools. jar

Ключ "t” говорит утилите jar. exe, что нужно вывести список содержимого ар­хива. Выходные данные этой команды должны выглядеть приблизительно так:

META-INF/

META-INF∕MANIFEST. MF myopentools/

Myopentools∕MyOpenTool. class myopentools/RunOpenTool. class

примечаниеТеперь скопируйте JAR-файл в каталог jb∕lib∕eχt и вызовите JBuilder с пара­метром — help: jbuiider. exe — help. Вы должны будете увидеть, что к списку ко­манд справки добавился новый элемент.

Если на этом этапе у вас возникли трудности, прочитайте конец преды­Дущего раздела, где более детально описана отладка JAR-файлов.

Запуск OpenTool-инструмента из каталога проекта

Вы вовсе не обязаны запускать OpenTool-инструмент из JAR-файла. На самом деле, очень просто запустить его из. class-файлов, созданных на основе вашего ис­ходного кода.

Для начала просто создайте файл classes. opentools, как было описано в пре­дыдущих подразделах этой главы Убедитесь, что файлы находятся в корневом ката­логе вашего проекта. Теперь внесите корневой каталог своего проекта в файл JBuilder. config, который расположен в каталоге ∕jb∕bin. Отредактируйте фраг­мент файла JBuilder-Config, чтобы он выглядел следующим образом:

# Add all the configuration files located in the lib∕ext directory includedir..∕lib∕ext

Addpath E:/SrcJava/jbbook∕OpenTools∕OpenToolsBasic∕classes

(# Добавьте все конфигурационные файлы, расположенные в каталоге lib∕ex⅛

Includedir. .∕lib/ext

Addpath E:∕SrcJava/jbbook∕OpenTools∕OpenToolsBasic∕classes)

Комментарии и директива includedir, расположенные в первых двух строках, остаются неизменными. Я привожу здесь эти строки просто для того, чтобы вы смогли найти в файле JBuilder. config нужное место и внести соответствующие изменения. Вам потребуется добавить третью строку, которая указывает месторас­положение файлов классов для вашего проекта. Вам, конечно же, понадобится из­менить эту строку, чтобы она соответствовала месторасположению файла на вашей машине.

После того, как вы внесете нужную информацию в config-файл, JBuilder най­дет файл Classes. opentools, Расположенный в каталоге E:/SrcJava/jbbook∕ OpenToois/OpenToolsBasic, И, следовательно, сможет загрузить ваш OpenTool-ин- струмент.

Теперь В Командной строке введите JBuilder. exe — help. Вы должны будете увидеть информацию об OpenTool-инструменте. Также попробуйте ввести JBuilder. exe — help MyOpenTool И JBuilder. exe — MyOpenTool.

Вот, подошел к концу первый раздел главы. К этому моменту вы уже должны знать, как создать простой OpenTool-инструмент, как зарегистрировать его в JBuilder, и как вызвать его из командной строки.

Создание OpenTool-πpoeκτa, работающего с GUI

в этом разделе вы научитесь добавлять новый пункт меню в ide-среду. через пункт меню можно вызывать созданное вами диалоговое окно. принимая во внимание то, какой информацией о создании opentool-инструментов вы уже располагаете, вы найдете, что это очень просто
проект, который мы хотим создать, будет выводить поему лорда байрона, как показано на рис. 32.5. после инсталляции инструмента вы сможете вызвать это диалоговое окно через пункт меню tools ∣ byron из среды jbuilder.
,©basic gul,×1,использование jbuiider ide для создания opentool-инструмента,чтобы настроить jbuilder на создание нового opentool-инструмента, такого как наш проект basicgui, во-первых, выберите пункт file ∣ new и создайте новый проект, дав ему имя basicgui. все остальные параметры, указанные на первой странице, оставьте без изменений.
на второй странице мастера проектов выберите required libraries ∣ add. в резуль-

Тате должно появиться диалоговое окно. В этом диалоговом окне выберите JBuiIder | Open Tools SDK. Щелкните на кнопке OK. Внизу раздела Required Libraries должен появиться пункт Open Tools SDK. Работа с мастером проектов завершена, так что те­перь можно с чистой совестью щелкнуть на кнопке Finish

Теперь пришло время реализовать класс, который будет сердцем вашего OpenTool-инструмента. Выберите в меню пункт File ∣ New и создайте не новое приложение или аплет, а новый класс. Назовите его BasicGUI. Он должен расши­рять класс Java. lang. object. Теперь создайте еще один класс, назвав его BasicGUIDiaIog. Он должен расширять класс JDialog.

Код OpenTool-инструмента, работающего с GUI-инструментом

примечаниеПриложение BasicGUi Состоит из двух разделов, показанных в листингах 32.7 и 32.8. Код в листинге 32.7 демонстрирует, как интегрировать OpenTool-инструмент в IDE-среду. Код в листинге 32.8 — это простой JDialog, Использующий JTextPane Для того, чтобы вывести несколько строк бессмертной поэмы. Поскольку описание диалоговых окон и текстовых панелей не является темой данной главы, я скажу о листинге 32.8 еще лишь то, что он представляет собой образец типового кода, кото­рый мог быть частью любого проекта, не только OpenTool-инструмента. Если вы хо­тите побольше узнать о диалоговых окнах, просмотрите еще раз главу 19.

При отладке фрагмента работы с диалоговым окном, проще будет вызвать его из стандартного Java-приложения, созданного для тестирования. Если диало­говое окно работает должным образом, вы можете вставить его в OpenTooI-проект. Это поможет обойти некоторые проблемы, с которыми есть шансы столкнуться во время от­Ладки OpenTool-πpoeκτa.

Как упоминалось ранее, важная часть кода приложения BasicGUi Находится в листинге 32.7. Внимательно изучите этот код, после чего мы возобновим обсужде­ние его ключевых особенностей.

Листинг 32.7. Главный модуль проекта BasicGUI

Package basicgui;

/**

* составе gui-интерфейсаTitle: Open Tools Basic GUI App

* Description: Простой OpenTool-проект, работающий

* Copyright: Copyright (c) 2001

* Company: Elvenware

* θaυthor Charlie Calvert

* */
import
import
import
import
import
import
import
import
public
{
Aversion 1.O

Com. borland. jbuilder. JBuilderMenu; com. borland. primetime. ide. Browser; com. borland. primetime. ide. BrowserIcons; com. borland. primetime. ide. BrowserAction; com. borland. primetime. PrimeTime; j ava. awt. Rectangle;

Java. awt. Dimension;

Java. awt. Toolkit;

Class BasicGUITool

Public BaeicGUIToolO

{

}

/**

*

* Добавление нового пункта в меню Tools Интегрированной среды разработки

* Oparam majorVersion Основной номер версии OpenTools

* Oparam minorVersion Дополнительный номер версии OpenTools

*/

Public static void InitOpenTool(byte majorVersion, byte minorVersion) f

If (majorVersion ≈ PrimeTime. CURRENT_MAJOR_VERSION)

{

MyBrowserAction ba =

New MyBrowserActionCByron", ,B’, "Lord Byron poem") ;

JBuilderMenu. GROUP_Tools. add(ba);

}

}

)

Class MyBrowserAction extends BrowserAction

(

Public MyBrowserAction(String pθ, char pi, String p2)

{

Super(pθ, pi, p2);

J

Public void actionPerformed(Browser browser)

{

∕∕ Создание модального диалогового окна в центре экрана

BasicGUIDialog dialog = new BasicGUIDialog(browser, "Basic GUI", true); Rectangle ScreenBounds =

New Rectangle(Toolkit. getDefaultToolkit().getScreenSize()); dialog. setSize(350, 400);

Dimension dialogSize = dialog. getSize(); dialog. SetLocation(

ScreenBounds. x + (ScreenBounds. width — dialogSize. width) /2, ScreenBounds.У + (ScreenBounds. height — dialogSize. height) ∕ 2);

Dialog. SetVisible(true);

title;
description: copyright: company: βauthor gversion
Листинг 32.8. Диалоговое окно для проекта BasicGUI

Public BasicGUIDialog(Frame frame, String title, boolean modal) (

Super(frame, title, modal); try <

Jblnit () ; pack () ;

}

Catch(Exception ex)

{

Ex. printStackTrace();

}

}

Public BasicGUXDialog()

(

This(null, "" , false);

)

Void jbɪnit() throws Exception

{

String S =

"She walks in beauty, like the nightN" +

"Of cloudless climes and starry skies,N" +

"And all that,S best of dark and brightN" +

"Meets in her aspect and her eyes,*N" +

"Thus mellow,D to that tender lightN" +

"Which Heaven to gaudy day denies.NN" +

"One shade the more, one ray the less,N" +

"Had half inφair‘d the nameless graceN" +

"Which waves in every raven tressN" +

"Or softly lightens o*er her face,N" +

"Where thoughts serenely sweet expressN" +

"How pure, how dear their dwelling-place.NN" +

"And on that cheek and o‘er that browN" +

"So soft, so calm, yet eloquent,N" +

"The smiles that win, the tints that glow,N" +

"But tell of days in goodness spent,N" +

"A mind at peace with all below,N" +

"A heart whose love is innocent.";

Panell. SetLayout(borderLayoutl);

JTextPanel. setText(S); jButtonl. setText("jButtonl"); getContentPane().add(panell);

Panell. add(jTextPanel, BorderLayout. CENTER);

Panell. add(jButtonl, BorderLayout. SOUTH);

Этот код начинается с проверки соответствия текущей версии JBuilder версии, используемой для компиляции OpenTool-инструмента. Если версии совпадают, вы­полняется создание пользовательского объекта MyBrowserAction. Этот объект со­держит обработчик события’ который мы будем использовать для создания экземп­ляра нашего диалогового окна. Когда пользователь выберет пункт меню в IDE-Cpe — де, произойдет вызов обработчика событий, и будет создан экземпляр диалогового окна.

Для того чтобы добавить наш OpenTool-инструмент в меню, программа исполь­зует предопределенный объект JBuilderMenu. Строка кода, ссылающаяся на этот объект, осуществляет процесс регистрации вместо вас. Вам всего лишь нужно доба­вить свой OpenTool-инструмент в меню JBuilder, а процесс интеграции выполнится "автомагически".

Класс MyBrowserAction Представляет собой ПОТОМОК Класса BrowserAction, Ко­торый, в свою очередь, является реализацией абстрактного класса AbstractAction, Относящегося к Java SDK. Реализации класса AbstractAction Предназначены для того, чтобы пользователям было легко создавать экземпляры ActionListener. Дру­гими словами, интерфейс AbstractAction определяет способ реализации наиболее сложных частей ActionListener Вместо нас, оставляя нам лишь простую задачу со­здания обработчика ActionPerfonned, Как показано в листинге 32.7. Действитель­ный код реализации AbstractAction Скрыт от нас, так как он является фрагментом запатентованных разделов JBuilder IDE. Больше информации по поводу ActionListener Вы сможете найти в главе 14. Обратите внимание на то, что конст­руктор MyBrowserAction Принимает три параметра:

MyBrowserAction Ьа =

New MyBrowserAction ("Byron" , ,B, , "LordByronpoeni");

Первый параметр — это текст, который появится в меню, второй — горячая кла­виша для этого текста, а третий параметр представляет тот текст, который возник­нет в строке состояния JBuilder в качестве подсказки. Подсказка появляется лишь тогда, когда пользователь наводит указатель мыши на пункт меню.

По завершении ввода кода для вашей реализации объекта BasicGUi Вам следует откомпилировать его. Поместите свой скомпилированный код и файл манифеста Classes. opentools В JAR-файл, как было описано выше. Затем скопируйте JAR — файл в каталог ∕jb∕lib∕e×t И перезапустите JBuilder. В меню Tools должен по­явиться новый пункт.

На этом создание GUI-расширения к JBuilder IDE завершено. Как говорилось выше, вы обнаружите, что этот процесс несколько проще, нежели добавление рас­ширения к JBuilder для работы в командной строке. Тем не менее, в примере работы с GUI-интерфейсом немного больше ручной работы, и он содержит больше строк кода, чем пример для работы с командной строкой.

Резюме

К этому моменту вы уже должны знать, как создавать простые OpenTool-инстру- менты, как регистрировать их в JBuilder, и как вызывать их из командной строки или из IDE-среды.

Часть Vll

JavaBean-компоненты

⅛ i Л* • 3; —

В этой части

33 Основы JavaBean-компонент

34 Собираем урожай JavaBean- компонентов

35 JavaBean-компоненты и свойства

36 JavaBean-компоненты, пакеты и Java 2D

37 Beanlnsight и JAR-файлы

чарли калверт

Глава 33

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *