Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Объединение процесса с основным классом

Читайте также:
  1. II. КОЛИЧЕСТВЕННАЯ ОЦЕНКА ЭПИДЕМИЧЕСКОГО ПРОЦЕССА
  2. III. ОРГАНИЗАЦИЯ КОРРЕКЦИОННО-РАЗВИВАЮЩЕГО ОБРАЗОВАТЕЛЬНОГО ПРОЦЕССА
  3. IV. УЧАСТНИКИ ОБРАЗОВАТЕЛЬНОГО ПРОЦЕССА
  4. IV. УЧАСТНИКИ ОБРАЗОВАТЕЛЬНОГО ПРОЦЕССА
  5. Активность ревматического процесса
  6. Альтернативное объединение и разъединение дуг
  7. Аменяйте конструкцию enum классом
  8. Аменяйте структуру классом
  9. Аналитические материалы, выпускаемые на основе наблюдений по строительству, инвестициям и основным средствам
  10. Балтика» рассматривает систему управления рисками как неотъемлемую часть управления бизнес-процессами Компании.

В вышеприведенном примере показан класс процесса отделенной от основного класса программы. Это делает пример более характерным и сравнительно легким для понимания. Существует, однако, альтернативная форма использования, которую вы будете часто видеть и которая не столь проста, но в большинстве случаев более кратка (что вероятно и увеличивает ее популярность). Эта форма объединяет класс основной программы и класс процесса, делая класс основной программы процессом. Поскольку для GUI (графический интерфейс пользователя) программы класс основной программы должен быть наследован как от Frame так и от Applete, наследование может быть использовано для добавления функциональности. Данный интерфейс называется Runnable и содержит те же основные методы что и Thread. Фактически Thread также реализует Runnable, что выражается только в наличии метода run().

Использование совмещенной программы-процесса не столь очевидно. Когда запускается программа, создается объект, который Runnable, но процесс не запускается, что должно быть сделано явно. Это можно пронаблюдать в следующем примере, функционально идентичному Counter2:

//: c14:Counter3.java// Using the Runnable interface to turn the // main class into a thread.// <applet code=Counter3 width=300 height=100>// </applet>import javax.swing.*;import java.awt.*;import java.awt.event.*;import com.bruceeckel.swing.*; public class Counter3 extends JApplet implements Runnable { private int count = 0; private boolean runFlag = true; private Thread selfThread = null; private JButton start = new JButton("Start"), onOff = new JButton("Toggle"); private JTextField t = new JTextField(10); public void run() { while (true) { try { selfThread.sleep(100); } catch(InterruptedException e) { System.err.println("Interrupted"); } if(runFlag) t.setText(Integer.toString(count++)); } } class StartL implements ActionListener { public void actionPerformed(ActionEvent e) { if(selfThread == null) { selfThread = new Thread(Counter3.this); selfThread.start(); } } } class OnOffL implements ActionListener { public void actionPerformed(ActionEvent e) { runFlag =!runFlag; } } public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(t); start.addActionListener(new StartL()); cp.add(start); onOff.addActionListener(new OnOffL()); cp.add(onOff); } public static void main(String[] args) { Console.run(new Counter3(), 300, 100); }} ///:~

Теперь run() внутри класса, но и после завершения inti() процесс все еще не запущен. Когда вы нажимаете кнопку start, процесс создается (если он еще не существует) следующим непонятным выражением:

new Thread(Counter3.this);

Когда что-либо имеет интерфейс Runnable, это просто означает, что оно имеет метод run(), однако ничего особеного в этом нет - не производится ни каких задуманных для процесса действий, кроме как наследование класса от Thread. Таким образом, чтобы сделать процесс из Runnable объекта необходимо создать отдельный объект Thread, как показано выше, передав объект Runnable в специальный конструктор Thread. Затем можно вызвать start() для данного процесса:

selfThread.start();

Выполняется обычная инициализация и затем вызов run().

Удобство использования интерфейса Runnable в том, что все принадлежит тому же классу. Если необходимо обращение к чему-либо еще вы просто выполняете это без использования отдельного класса. Однако, как можно было видеть в предыдущем примере, доступ также прост как и использование внутреннего класса [70].




Дата добавления: 2015-09-11; просмотров: 18 | Поможем написать вашу работу | Нарушение авторских прав

Буфер обмена | Динамическое построение событий | Отделение бизнес логики от логики пользовательского интерфейса | Каноническая форма | Что такое компонент (Bean)? | Извлечение BeanInfo с помощью Инспектора | Помещение компонент в пакеты | Упражнения | Отзывчивый пользовательский интерфейс | Наследование от процесса |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав