Скачиваний:
39
Добавлен:
15.02.2021
Размер:
804 Кб
Скачать
☆

 

Следующвашазадачая

- сохранениетекущегоизобфранаженияктала

 

диск.

Java API предонесинсттавляетколькодляреализацииумедантнойв

 

задачи.

 

 

 

 

•

Во-первых,вамнужнодобавитькнопку«Saveвашеокно. Image»

 

Дляэтоговыможетедобавитькнопки«Save«Reset»вновуюImage»

 

 

Jpanel,азатемразместитьэтупанельв

SOUTH частиокна.

 

 

Событияоткнопки«SaveтакжедолжныобрабатыватьсяImage»

 

реализацией ActionListener.Назкначьтеопкам«Saveи«Reset»Image»

свои

значенияком( пр,нд«save»имер«reset»)длятого,чтобыобработчик

 

 

событиймоготличисобытияэтихдвухразькн.опокых

 

 

•Вобрабкно«SaveпктчваминеобходимокеImage»реализовать

возможностьуказанияпользователем,какойфайлонбудетсо

 

хранять

изобра.Этоможсдсепнониелатьмощьюкласса

javax.swing.JFileChooser.

Указкласспредоставляетнныйметод

showSaveDialog(),которыйоткрывает

диалогокно«Saveпвотемзволяясамымпользователюfile»,выбрать

 

 

директориюдлясохранения.Метод

принимаетграфическийкомпонент,

 

котоявляетсяродитыйэледляментольскимдиалокнавыборговогом

 

 

файла,чтоп зволяетцентрированиюокнасвыборомотносительноего

 

 

родителя.Вкачестверодитеприложенияиспоокнользуйте.

 

 

Каквымоглизаметить,д

анныйметодвозврзначениетипащает

int,

котоуказываетроеезульоперациивыборафайат.Еслиметодвозвращает

 

 

значение JfileChooserтогдаможнопродолжить.APPROVEоперациюOPTION,

 

сохрфа,впрйлненияослучаетивн,пользотменилперациюватель,

 

 

поэтомузакончитеданнуюобрасобсохраненияоткуезытия.Если

 

 

пользовательвыбралдиректориюсохряф,авыможетейланенияееузнать,

 

 

используяметодgetSelectedFile(),котвозвращрыйобъекттипает.

 

 

•

Также необходимо

насредстроивыборафайлтьво

ов,чтобы

сохранятьизображениятолвформатеко

PNG,наданномэтапевыбудете

 

рабтосдлькотафннымть.рмасможевыэтнаспомощьютероить

 

 

javax.swing.какfilechooserэтопродемонстрировано.FileNameExtensionFilter,

ниже:

JFileChooser chooser = new JfileChooser();

FileFilter filter = new FileNameExtensionFilter("PNG Images", "png");

chooser.setFileFilter(filter);

chooser.setAcceptAllFileFilterUsed(false);

Построкаледняягарантирует,чтосредствовыборанеразрешит

пользователюисп льзованиетли

чныхот

png форматов.

•

Еслипользоватеуспешновыбралфай,следующимшагомь

 

являетсясохраненияизобф надискженияктала!Дляданногородазадач

 

Java

включаетсебянеобходимуюфункциональность.К

ласс

javax.обеспечивimageioпроперстые.ImageIOацет

иизагрузкисохранения

изображения.Вы

можете использовать метод write(RenderedImage im, String

formatName, File output). Параметр formatName будет содержать значение

«png”. Тип «RenderedImage» - это просто экземпляр BufferedImage из вашего

компонента JimageDisplay. (Используйтедлянеготипд ступаpublic

)

 

Метод write()можетвызватьисключ,поэтомувамнениеобходимо

 

заключитьэтотвызовблок

try/catch иобрабвозможнуюшибкутать.Блок

 

catch долженпроинформпользоватеобошчеидиарбкеоватьезля

 

говое

окно.

Swing предоставляеткласс

javax.swingдлятого,чтобы.JoptionPane

 

упропроцессозданияттьнформацидиалогокили,коннгдевыхнных

 

 

нужновыбрада/нет.Дляэтвыогоьможетеиспользоватьстатическийметод

 

 

JoptionPane.showMessageDialog(Component parent, Object message, String title, int

messageType),где messageType увасбудетJOptionPane.ERROR_MESSAGE

.В

сообщенииошибкевыможетеиспольвозврноватьметодащаемоечение

 

 

getMessage(),азагокналможетбытьвком,например, «Cannot Sa

 

ve Image».

Родительскимкомпбудлякноненет,чготодиалоговоебымокнос

 

 

сообщениемошибкевыводилосьотносиценокна.тельнора

 

 

Послетого,каквызакончреалэтихфункцийтезацию,запустите.

 

 

Теперьвысможетеисследоватьразличныефр, кталы

также высможете

сохрихндиска.Вынятьтакжеможетепровприложениенаритьвывод

сообщенийошибках,попробуйтеизображениеранитьвфайл,который

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

сохранитьфайлименем,ко

тороеявляетсякаталогомцелевойпапк

е.

Лабораторнаяработа№6Мно. генеопоточныйфракталовтор

 

Вданнойлаборатработенеобходимобудетрнреализй вать

 

возможносрисованияфракнескталафоньлькимипо.токамивымиДва

 

преимуществаданногоподх: да

первое - пользовательскийинтерфнебудетйс

 

завпроцессеисатьрисованияновогофр,второектала

-

еслиувас

компьютермног, процессядеррисовбудетныйамногобыстреения.

 

Несмотрянато,чтомногопоточноепрограммированиеможетбытьочень

 

сложным,процессизмененияприложениябудетпрост,благодарявстроенной

 

поддержкеSwingфонпотоков. вых

 

 

Наданныймоментприложениегенефравыполнялоськталовтора

 

одномпотоке(Event

-DispatchЭтоп,котокобThread)рвсеыйабатывает.

 

событияSwing,таки

екакнажатиекнопок,перерисовка.д.Поэтому

 

разработапользовинтерфейсныйательскввремяисаетовычисленияй

 

фра;таккаквычислениеталавыполняетсяпотокеобрасоб, откиытий

 

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

я.

Вэтойлабораторнработенужноизменипротакй,граммучонаьобы

 

исподинилильзованескофонпотоковлаькодлявыхчисленияфрактала.

 

Вчастно,п токбрастиобнебудетоткиытийисподляьзоваться

 

вычислфракта.Теперь, ниясливычислениеабуд

етвыполняться

нескпо,льтонеокбудразбитьаимиходимоенагонесколько

независимыхчастей.На,присованиимерфрактможндатькаждомул в

потпооднойстрокекуфракталадлявычисле.Сложзаключаетсянвияость

том,чтонеобходимособлюдатьва

жноеогранSwing,аимччтоенв иено

потокеобрасобпрооткеытвзаимодействиесходиттолькокомпонентами

SwingДляэтого.предоSwingинст,чтоавлярументыупрощает

постза.вленнуюдачу

Впрогрчавозникаютммирстоподобныепроблемывании,что

ерез

пользовинтерфейсьскапускаютдлительнуюопер,даннаяйцию

операциядолжнавыполфорежинятьсяовдляомхранения

работоспособностипользовательскогоинтерфейса.Наиболееяркпример

—

веб-браузеры;покастр нгружаетсяиотображаетца

ся,упользователя

должнабытьвозможностьотменитьоперац,щелкнутьссылкуиюли

 

выполнитьлюбоедругоедействие.ДлятакродапргоблемSwing

 

предоставляетклассjavaxкоторый.swingоблегчаетпроцесс.SwingWorker,

 

организациифонп . токавSwingWorkerго

- абстркл,включающийктныйсс

всебяследующиеважныеметоды:

 

•doInBackground() - метод,которыйфактическивыполняетновые операции. вызыSwingэтотметвфаетопотокенд,аневпотокеом

обрасоб. откеытий

•done() - этотметодвызывается,когдафон овзазавершенадачая.Он вызываетсяпотокеобрасоб,поэтомуоткиытийданномуметодуразрешено взаимодействоватьпользовательскиминтерфейсом.

КлассSwingWorkerимеетзапутаннуюспецификацию,насамомделеэто

 

 

SwingWorkerТипT

<T, V>.

- этзначеипо

ния,возвращаемогофункцией

doInBackground(),когзаполностьюдачавыполнена.ТиспользуетсяV ,

 

 

когдафоноваяз возвдачапромежуточныеащаетзначениявоврем

 

 

выполнения;этипромежзначениябудосдутточныеприисупныользовании

 

 

методовpublishи

()

processОбатипамогутнеиспользоваться(). ,таких

 

случаяхнеобуказатьObjectодлянеиспользуемоготипаимо.

Рисованиефоновомрежи е

Вданнойлабораторнойработевоснеовномобходимобудетработатьв

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

1)СоздайтеподклассSwingWorkerименемFractalWorker,который будетвнутреннимклассомFractalExplorerЭтонеобходимодлятого,чтобыу .

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

чтоклассSwingWorkerявляетсяуниверсальным,поэтомунужноуказать параметры - можнопростоуказатьObjectдлядвухпараметров,потомучто

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

ультатевас

 

должнаполучитьсяследующаястрк: дачка

 

 

 

private class FractalWorker extends SwingWorker<Object, Object>

 

2)КлассFractalWorkerбудетотвечатьзавычислзначцветадлянией

 

 

однойстрокифрактала,поэтемуомутребуютсядваполя:целочисл

 

еннаяy

-

координатавычисляемойстроки,массселдляпаintхранения

 

 

вычисленныхзначенийRGBдлякаждогопикэтойселятр.Кокенструктор

 

 

долженбудетполучатьy

-координатувкачествепараметрасохранятьэто.На(

 

 

данэтапеннадоомвыделятьп

амятьподцелочисленныймассив,таккакон

 

непотребуется,покастроканебудетвычислена.)

 

 

 

3) МетодdoInBackground()вызываетсяфонпотокеиотвечаетвомза

 

 

выполндлитзадачие.Поэтомуниельнойввашейреализациивамнужно

 

будет

взять частькодаизваш

предыдущейфункции«drawпомеfractal»вестить

 

 

этотметод.Вместотого,чтобырисоватьизображениеокне,циклдо

 

 

 

будетсохракаждоезначитьвсоответствующемRGBниеэлементе

 

 

целочисленногомас.Вынеиваможетеизменяотображениеэ ього

 

 

пот, очтотомукавынарушитеограниченияпотоковSwing.

 

 

 

4) Вместоэтогвыделипадлямассцтеьчлыхивначалеселв

 

 

реализацииэтогометодамассив(долженбытьдостаточнобольшимдля

 

 

 

храненияцелойстрокизначцвета),затемнийсохрани

 

тецветкаждого

 

пикселявэтоммассиве.Единственныеразличнастоящиммежду

 

 

предыдущимкодомвтом,чтовамнужнобудетвычисфракталд яить

 

 

 

указанстроки,чтовынданойэтапенобновляетеомотображение.

 

 

МетодdoInBackground()долженвозвращат

ьобъекттипаObject,таккак

 

этоуказановобъявленииSwingWorkerПростовернитеnull. <T, V>.

 

 

5) Методdone()вызывается,когдафоноваязавершенадача,иэтот

 

 

методвызываетсяизпотокаобрасобSwingоткиытийЭтоозначает,чтовы.

 

 

 

можетемодифицироват

ькомпонентыSwingнавашвкус.Поэтому

 

 

методевыможетеп ребимассивстданныхрок,атьрисуяпи,которыесели

 

быливычисленыdoInBackground ().

 

Послетого,какстрокабудетвычислена,вамнужнобудетсо бщить

 

Swing,перерисовчастьизображенить

я,которбылаизменена.Посколькуя вы

 

изменилитолькооднустроку,перерисовываизображениецеликомбудеть

 

затратно,поэтвым использоватьжетемуметодJComponentкоторый.repaint(),

 

позволитвамуказатьобластьдляперерисовки.Уданногоместьтода

 

неиспользуемыйпараметртипа

long,выможетепростоуказатьдля0этого

 

аргумента.Вкачествеостальныхп раметровукажитевычисленнуюстроку,

 

значенияначалафрагментадляперерисовки(0,конечныезначенияy)

 

фрагмента(displaySize, 1).

 

 

Послетого,каквы

завершиликлассдляфоновойзадачи,следующим

 

шагомнужнобудетпривязатьегокпроцессурисованияфра.Такталов

 

частькодаизфункции«drawужезадействовfractal»разрабатываемомна

 

классе,наданнэтапемоизмежнофункцию«drawитьа

fractal»,

именно,для

каждстрвотображйкисоздатьотдрабочиениильныйобъект,затем

 

вызватьдлянегометодexecuteЭтодействиезапустпотокфон(). ивый

 

запуститзадачувфоноврежи.Пом,чтокласснитеFractalWorkerотвечает

 

загенерациюданныхстро

кизарисованиеэтойстр,п функцияэтомуки

 

«drawдолжнабытьfractal»простой.

 

 

Послезавершенияданнойфункции,высможзаметитьотображения

 

сталоболеебыстрым,апользоватеинтерфсталб лтзывчивымеьский.йсе

 

Такжевысможзаметитеоднупроб

лемуввашемпользовательском

 

интерфейсе - есливынажметеэкраниливоопкувремяперерисовки,

 

программабработаетэтос ,бытиехдтянобытьлжнопроигнорированодо

 

завершенияоперации.

 

 

Игнорисобытийвовремяперерисовкиование

 

Самыйпростой

способрешпроблемуигнорированиять событийво

 

времяперерисовки

- отслежколичествотьостстрокавшихся,которые

 

должныбытьзавершены,иигнорилотключатьироватьвзаимодействие пользователемдотехпор,поканебудутнарисованытрокие.Дляну жно добавитьполе«rowsклассFractalremaining»ииспользоватьего,Explorer

чтобыузнать,когдабудетзавершенаперерисовка.Чтениезаписьэтого значениябудетпроисхвпотобрасодитькечтобы, откиытийнебыло

параллельногодоскэтэлеменупаому

ту.Есливзаимодействиересурсом

будетпроисходитьолькоизодного,токавозникнетошибок

параллелизма.Дляэтого:

•Создайтефункциюvoid котораяenableUI(booleanбудет val),

включатьилиотключатькнопкисвыпадающимспискомпользовательском интерфейсенаосновеуказпараметра.нногоДлявключенияилиотключения

этихкомпоиспжнонентовметодльзоватьSwing setEnabled( boolean).

Убедитесь,чтовашметодобновляетстояниекнопсохранен,кнопкия

сбросаивыпадающегосписка.

•

Функция«draw fr

actal»должнасдещеве.Перваятьщи

- она

должнавызватьметодenableUIчтобыотключитьвсеэлементы(false),

 

 

пользовательскинтеворрисованияфейсаемя.Вт раяго

 

 

- онадолжна

установитьзначение«rowsравнымобщемуколичествуremaining»строк,

 

 

которыенужнонарисовать.Этидействиядолжныбытьсделаныперед

 

 

выполнениемкаких

-либорабочихзадач,иначеэтоможетпривестик

 

некорректнойработеалгоритма.

 

 

 

•Вметодеdone(),умезньшитеачение«rowsнакак1,remaining»

последшагданнооперации.ийЗа

т,емслипослеумезначениеьш«rowsя

remaining» ра0,вызовитенометодenableUI (true).

• Након,измреализациюнитеmouse -listenerдлятого,чтобына сразувозвпредыдущееращаласьсостояние,еслизнач«rowsние remaining»

неравнонулю.Другимис ловами,приложениебудетреагироватьнащелчки мышью,тольковтомслучае,еслибольшенетстрок,котдоблжныртье нарисованы.Обратите( внима,ч акжененужноиевноситьаналогичные

изменениявобработчсобыт,почтовсеомуэтикйомпонентыбуду

т

отключспомеощьюenableUIтоданы ().)

Послевыполданныхшагов,должнаенияполучитьсяпрограммадля

рисованияфракталовнескп льикоторая, кзимипретитдействия

пользователя,покапроцессрендерингапроисхвфонрежо.двомимт е

Лабораторнаяработа№7.

Веб-сканер

 

Вэтойлабораторнойработевамнеобудетреализходимовать

 

 

элемвебнтарный

-сканер.Сканербудетавтоматическизагружатьвеб

-страницы

изИнтернета,искатьновссыэтихлкистраниповторятьи.Онцахбудет

 

 

простоискатьновые

 

URL-адрм(есатоположениявеб

-стр)нкаждойниц

стран,собихвывцератькработынцедитпрограммы.Бослееожные

 

 

веб-сканерыисподиндексацльзуютсясодержИнтернетаидлялимого

 

 

очисткиадресовэлектроннпотспамачты.Есливыойгда

 

-нибудь

использопоисксистему, вовалиыответвуюназаполучалиросданные,

 

 

генерипоисковроботоуем. ыем

 

 

 

Терминология

 

 

•

URL:

унифицированныйуказательресурса.Этоадресвеб

-

стра.Оименслицыедующуют

 

структуру:

 

1)методдоступакресурсу;

2)доменноеим я

3)путькфайлу

4)данныеофайле

Вданнойлабораторнойработебудетрассмметодступатрен«http://».

 

 

•

HTTP: Hyper Text Transfer Protocol

(Протоколпередачи

гипер)Этостандар. екстатекстпр,испоныйтоколвыйд ьзуемыйя

 

 

передачиданныхвеб

 

-страницы черезИнтерн.Посплетднейцификацией

 

HTTP являетсяверси1которую.1,будетиспользованаданнойлабораторной

 

 

работе.

 

 

 

 

•

Сокет:

Сокет(разъем)

- эторесурс,предоперационнойставляемый

 

системой,котп рыйзволяетвамобмениватьсяданнымидругими

 

 

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

 

 

соединениявеб

 

-сер,новдолжныеромиспользоватьTCP

-сокети

использпротHTTPдлятоговатькол,чтобысервермогответить.