Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЕВ-4791

.pdf
Скачиваний:
24
Добавлен:
07.03.2016
Размер:
2.52 Mб
Скачать

fFormulary.add(theTMedication);

//Об’єкти theTokenizer і TMedication нам більш не потрібні

//Пізніше вони будуть знищені підпрограмами збірки сміття

}

//Закриття файла на диску theStream.close();

}

//Виняткова ситуація FileNotFound є різновидом виняткової cитуації

//IOException. ІІ слід перехоплювати до перехоплення виняткової cитуації

//Exception загального типу

catch (java.io.FileNotFoundException e) { System.err.println(e.getMessage()); e.printStackTrace();

}

catch (java.io.IOException e) { System.err.println(e.getMessage()); e.printStackTrace();

}

}

protected static void show(String theKey)

{

//Для одного значення ключа може бути декілька рядків. Обираємо всі java.util.Iterator theIterator = fFormulary.iterator();

short theCount = 0;

while (theIterator.hasNext())

{

TMedication nextTMedication = (TMedication) theIterator.next(); if ( nextTMedication.fDrugName.equals(theKey))

{

System.out.println (nextTMedication.toString()); theCount++;

}

}

if (theCount == 0)

System.out.println(“У формулярі відсутня інформація про ” + theKey);

}

protected static void show()

{

//Відображення усіх рядків формуляра

java.util.Iterator theIterator = fFormulary.iterator(); while (theIterator.hasNext())

System.out.println (theIterator.next().toString());

}

public String toString()

{

return fDrugName + “ ” + fStrength.toString() + “mg” +fPackage;

}

}

 

ПРИКЛАД 1.

 

Finally завжди виконується

}

class FourException extends Exception {

public class AllwaysFinally {

{

public static void main(Sting[] args)

System.out.println(“Входимо в перший блок try” ); try {

System.out.println(“Входимо в другий блок try” ); try {

71

throw new FourException();

}

finally {

System.out.println(“finally в другий блок try” );

}

} catch (FourException e) { System.err.println(“Перехоплено FourException в першому блоці

try” );

} finally {

System.err.println(“finally в першому блоці try” );

}

} }

ПРИКЛАД 2. (Обмеження винятків).

Перевизначені методи можуть збуджувати тільки винятки, що описані у версії базового класу чи винятки, які успадковані від винятків базового класу

class BaseballException extends Exception

{ }

class Foul extends BaseballException {

}

}

class Strike extends BaseballException

{

abstract class Inning {

 

 

Inning() throws BaseballException {

//Фактично збуджувати виняток не потрібно

}

abstract void atBat() throws Strike, Foul;

 

void walk() { } //Нічого не збуджує

 

 

}

{

}

class StormException extends Exception

class RainedOut extends StormException

{

}

class PopFoul extends Foul { } interface Storm {

void event() throws RainedOut; void rainHard() throws RainedOut;

}

public class StormyInning extends Inning implements Storm {

//Можна додати нові винятки для конструкторів, але треба мати //на увазі й винятки базового конструктора:

StormyInning() throws RainedOut, BaseballException { }

StormyInning(String s) throws Foul, BaseballException { }

// Звичайні методи повинні відповідати базовим:

//! void walk() throws PopFoul { } // Помилка компіляції

//Інтерфейс не МОЖЕ додавати винятки до існуючих методів

//базового класу:

//! void event() throws RainedOut { }

//Якщо метод не був визначений в базовому класі, то виняток

//дозволяється:

public void rainHard() throws RainedOut { }

//Перевизначені методи можуть збуджувати успадковані //винятки: public void event() { }

void atBat() throws PopFoul { }

public static void main(Sting[] args) { try {

StormyInning si = new StormyInning(); si.atBat();

}catch (PopFoul e) { System.err.println(“Pop foul”);

}catch (RainedOut e) {

72

System.err.println(“Rained out”); } catch (RainedOut e) {

System.err.println(“Типова помилка”);

}

// Strike не збуджується в успадкованій версії

try { //Що відбудеться при східному перетворенні?

Inning i = new StormyInning(); i.atBat();

//Ви повинні перехоплювати визначення з базової версії методу:

}catch (Strike e) { System.err.println(“Strike ”);

}catch (Foul e) { System.err.println(“Foul”);

}catch (RainedOut e) { System.err.println(“Rained out”);

}catch (BaseballException e) { System.err.println(“Типовий виняток”);

}

}

}

12.5. Індивідуальне завдання для опрацювання теми

ПРИКЛАД 1. import java.io.*; class InputFile {

private BufferedReader in; InputFile(String fname) throws Exception { try {

in = new BufferedReader(new FileReader(fname));

//Код, який спроможний на виняток

}catch (FileNotFoundException e) { System.err.println(“Неможливо відкрити ” + fname); throw e;

}catch (Exception e) {

try { in.close();

}catch (IOException e2) { System.err.println(“in.close() виконаний невдало”);

throw e; //Повторне збудження

}finally {

//Не закривайте файл тут!!!

}

}

String getLine() { String s;

try {

s = in.readLine();

}catch (IOException e) { System.err.println(“readLine() виконаний невдало”); s = “Помилка”;

return s;

void cleanup() { try {

in.close();

}catch (IOException e2) {

73

System.err.println(“in.close() виконаний невдало”);

}

}

}

public class Cleanup {

public static void main(Sting[] args) { try {

InputFile in = new InputFile(“Cleanup.java”); String s;

int i = 1;

while((s = in.getLine()) != null) System.out.println(“”+ i++ + “: “ + s); in.cleanup();

} catch (Exception e) {

System.err.println(“Перехоплено в main, e.printStackTrace()”); e.printStackTrace(System.err);

}

}

}

ПРИКЛАД 2. import java.io.*;

class ShowFile {

public static void main(String args[]) {

{

int i; FileInputStream fin;

//Переконатися, що файл вказаний if (args.length != 1) {

System.out.println(“ Usage: ShowFile File”); return;

}

try {

//Відкриття файла

fin = new FileInputStream(args[0]);

} catch (FileNotFoundException exc) { System.out.println(“ File Not Found”); return;

}

try {

//Читання файла до отримання ЕОF do {

//Читання з файла i = fin.read();

if(i != -1) System.out.print((char) i);

// Значення -1

//

}while(i != -1);

}catch (IOException exc) { System.out.println(“ Error reading file.”);

}

try {

//Закриття файла fin.close();

} catch (IOException exc) { System.out.println(“ Error reading file.”);

}

}

}

74

ПРИКЛАД 3. import java.io.*;

class CopyFile {

public static void main(String args[]) {

{

int i; FileInputStream fin;

FileOutputStream fout;

//Переконатися, що файл вказаний if (args.length != 2) {

System.out.println(“Usage: CopyFile From To”); return;

}

try {

//Відкриття файла

fin = new FileInputStream(args[0]);

} catch (FileNotFoundException exc) { System.out.println(“File Not Found”); return;

}

try {

// Відкриття файла

fout = new FileOutputStream(args[1); } catch (FileNotFoundException exc) {

System.out.println(“Error Opening Output File”); try {

//Закриття файла fin.close();

} catch (IOException exc2) { System.out.println(“Error closing input file.”);

}

return;

}

try {

//Читання файлу до отримання ЕОF do {

//Читання з файла i = fin.read();

if(i != -1) fout.write (i);

}while(i != -1);

}catch (IOException exc) { System.out.println(“ Error file.”);

}

try { fin.close();

} catch (IOException exc) { System.out.println(“Error closing output file.”);

}

try { fout.close();

} catch (IOException exc) { System.out.println(“Error closing output file.”);

}

}

}

ПРИКЛАД 4.

/* В цій версії програми оператор try з ресурсами використовується для автоматичного закриття файлу, коли він вже більш не потрібен.

75

Для компіляції необхідне JDK 7. */ import java.io.*;

class ShowFile1 {

public static void main(String args[]) {

{

int i;

// Переконатися, що файли вказані if (args.length != 1) {

System.out.println(“Usage: ShowFile filename”); return;

}

try (FileInputStream fin = new FileInputStream(args[0])) { //Блок оператора try з ресурсами

do {

i = fin.read();

if(i != -1) fout.write (i);

}while(i != -1);

}catch (IOException exc) { System.out.println(“ Error file.”);

}

}

}

ПРИКЛАД 5. import java.io.*;

class RWData {

public static void main(String args[]) {

{

int i=10;

double d = 1023.56; boolean b = true;

// Записати ряд значень

try (DataOutputStream dataOut = new DataOutputStream(new DataOutputStream(“testdata”)))

{

System.out.println(“ Writing ” + i); dataOut.writeInt(i); System.out.println(“ Writing ” + d); dataOut. writeDouble (d); System.out.println(“ Writing ” + b); dataOut. writeBoolean (b);

System.out.println(“ Writing ” + 12.2 * 7.4); dataOut. writeDouble (12.2 * 7.4);

}

catch (IOException exc) { System.out.println(“ Write Error.”);

return;

}

System.out.println();

try (DataInputStream dataOut = new DataInputStream(new DataInputStream(“testdata”))) { // Читання двоїстих даних з файлу

i = dataIn.readInt(); System.out.println(“Reading” + i); d = dataIn.readDouble(); System.out.println(“Reading” + d); b = dataIn.readBoolean(); System.out.println(“Reading” + b); d = dataIn.readDouble (); System.out.println(“Reading” + d);

}

76

catch (IOException exc) { System.out.println(“ Read Error.”);

}

}

}

ПРИКЛАД 6. import java.io.*;

class RandomAccessDemo {

public static void main(String args[]) {

double data[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double d;

try (RandomAccessFile raf = new RandomAccessFile(”random.dat”, “rw”))

{

//

for(int i=0; i < data.length; i++) { raf.writeDouble(data[i]);

}

raf.seek(0);

d = raf.readDouble(); System.out.println(“First value is” + d); raf.seek(8);

d = raf.readDouble(); System.out.println(“Second value is” + d); raf.seek(8*3);

d = raf.readDouble(); System.out.println(“Fourth value is” + d); System.out.println();

System.out.println(“Here is every other value: ”); for(int i=0; i < data.length; i+=2) {

raf.seek(8*i);

d = raf.readDouble(); System.out.print(d + “ ”);

}

}

catch (IOException exc) { System.out.println(“ I/O Error: ” + exc);

}

}

}

Рекомендована література [3-6; 9-12].

77

Тема 13. МЕХАНІЗМИ СТВОРЕННЯ ВІКОН ТА АПЛЕТІВ

Вивчивши матеріали теми, студенти знатимуть:

характеристику і структуру аплета;

визначення і використання інструментів Appletviewer;

механізми запуску аплетів;

технологію опрацювання подій;

шляхи формування багаторядкових текстових полів;

процедури управління розміщенням компонентів;

модель подій бібліотеки Swing;

каталог компонентів бібліотеки Swing;

процеси організації компонентів.

Вивчення матеріалу теми допоможе студентам:

створювати різноманітні компоненти;

визначати характеристики зовнішнього вигляду інтерфейсу;

формувати динамічне зв’язування подій;

розрізняти обчислення і користувацький інтерфейс;

управляти розміщенням компонентів;

закріпляти дії, що виконують процеси зв’язування подій.

13.1.Навчальні завдання для виконання практичної роботи

Мета роботи: сформувати практичні навички з конструкції аплетів, основних компонентів користувацького інтерфейсу та визначити технологію складання і виконання фрагментів програм різноманітної структури.

План

1.Простий аплет: обмеження аплетів, переваги аплетів, каркаси додатків.

2.Запуск аплетів у Web-броузері. Використання інструменту Appletviewer.

3.Тестування аплетів. Запуск аплетів з командного рядка. Інструмент для показу програм на екрані.

4.Використання Провідника Windows. Створення кнопки.

5.Обробка подій. Багатострокові текстові поля.

6.Управління розташуванням компонентів.

7.Полярне, послідовне, табличне, абсолютне і блокове розташування.

8.Модель подій бібліотеки Swing: типи подій, опрацювання кількох подій одночасно.

9.Каталог компонентів бібліотеки Swing: кнопки, значки, підказки, рамки, флажки, комбіновані списки тощо.

13.2.Завдання і послідовність виконання лабораторної роботи

Індивідуальне виконання лабораторної роботи кожним студентом передбачає закріплення теоретичних знань.

Лабораторна робота

«Організація формування вікон та аплетів мовою Java»

Мета роботи. Навчитися складати і виконувати в середовищі Java форми меню, вікон і аплетів з конкретної обраної теми.

Шляхи досягнення мети. Вивчити теми 8-10 програми дисципліни.

Вивчити технологію програмування меню, вікон, кнопок, аплетів у середовищі Java. Скласти фрагмент програми за обраною темою з одним або більше вікнами чи аплетом. Виконати програму на комп’ютері. Скласти звіт і захистити його.

1.За допомогою будь-якого редактора текстів чи блокнота сформувати готовий приклад аплета, завдання якого запропонує викладач (приклади завдань 1-14 розміщено далі).

2.Виконати компіляцію створеного файла. За наявності повідомлень про помилки виправити останні й запустити скоригований файл на повторну компіляцію.

78

3.Запустити аплет через командний рядок або в браузері. Форми його подання є результатами дії створеного аплета. У разі виникнення різноманітних повідомлень помилкового характеру скористатися опціями й іншими додатковими інструментами.

4.За результатами виконання лабораторної роботи скласти звіт, що має включати:

1)титульну сторінку встановленого зразка (додаток 1);

2)на першій сторінці слід розмістити:

назву роботи;

мету лабораторної роботи;

шляхи виконання лабораторної роботи (розширений план поетапного виконання роботи);

3)сторінки від 2-ї …, мають містити:

перелік усіх повідомлень виконання прикладу 1 та опис їх;

перелік усіх повідомлень прикладу 2 та їх конкретний опис й умови застосування;

текст власно розробленого аплета (якщо власна програма відсутня, цей пункт не зазначають);

текст або тексти програм мовою Java, які запропоновані викладачем.

Приклади завдань для виконання лабораторної роботи

Приклад 1. Міні-редактор

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*;

public class TextPane extends JApplet{ JButton b = new JButton("Додати текст"); JTextPane tp = new JTextPane();

static Generator sg = new Arrays2.RandStringGenerator(7);

public void init(){ b.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){ for(int i=0; i<10;i++)

tp.setText(tp.getText() + sg.next() + "\n");

}

});

Container cp = getContentPane(); cp.add(new JScrollPane(tp)); cp.add(BorderLayout.SOUTH,b);

}

public static void main(String[] args){ Console.run(new TextPane(),475,425);

}

}

(Текст пакета com.bruceeckel.swing.*) class Console {

// Create a title string from the class name: public static String title(Object o) { String t = o.getClass().toString();

// Remove the word "class": if(t.indexOf("class") != -1) t = t.substring(6);

return t;

}

public static void

run(JFrame frame, int width, int height) { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

79

frame.setSize(width, height); frame.setVisible(true);

}

public static void

run(JApplet applet, int width, int height) { JFrame frame = new JFrame(title(applet));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet);

frame.setSize(width, height); applet.init();

applet.start();

frame.setVisible(true);

}

public static void

run(JPanel panel, int width, int height) { JFrame frame = new JFrame(title(panel));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(panel);

frame.setSize(width, height); frame.setVisible(true);

}

}

(Частина пакета com.bruceeckel.util.*) class Arrays2 {

public static String toString(boolean[] a) { StringBuffer result = new StringBuffer("[");

for(int i = 0; i < a.length; i++) { result.append(a[i]);

if(i < a.length - 1) result.append(", ");

}

result.append("]"); return result.toString();

}

public static String toString(byte[] a) { StringBuffer result = new StringBuffer("[");

for(int i = 0; i < a.length; i++) { result.append(a[i]);

if(i < a.length - 1) result.append(", ");

}

result.append("]"); return result.toString();

}

public static String toString(char[] a) { StringBuffer result = new StringBuffer("[");

for(int i = 0; i < a.length; i++) { result.append(a[i]);

if(i < a.length - 1) result.append(", ");

}

result.append("]"); return result.toString();

}

public static String toString(short[] a) { StringBuffer result = new StringBuffer("[");

for(int i = 0; i < a.length; i++) { result.append(a[i]);

80