Создание собственных событий в Java

Прежде всего нужно создать класс события, наследуемый от java.util.EventObject. В нем для удобства можно реализовать несколько конструкторов. Пример такого класса:
import java.util.EventObject;
public class CommandDataAvailiableEvent extends EventObject {
 
   private String message;
 
    public CommandDataAvailiableEvent(Object source, String message) {
     super(source);
     this.message = message;
   }
 
   public CommandDataAvailiableEvent(Object source){
     this(source, "");
   }
 
   public CommandDataAvailiableEvent(String s){
     this(null, s);
   }
 
   public String getMessage(){
    return message;
   }
 
   @Override
   public String toString(){
    return getClass().getName() + "[source = " + getSource() + ", message = " + message + "]";
   }
}
 
Далее следует определить интерфейс, который будут реализовывать все слушатели события. В интерфейсе должна быть объявлена функция, обрабатывающая событие:
public interface CommandDataAvailiableListener {
   public void commandDataAvailiable(CommandDataAvailiableEvent e);
}
 
В классе, генерирующему события, необходимо объявить коллекцию, в которой будут храниться ссылки на слушателей:
private ArrayList listeners = new ArrayList();
 
А после этого добавить несколько функций для обработки списка слушателей: добавление слушателя
public void addComDataEnableEventListener(ComDataEnableEventListener listener){
                listeners.add(listener);
              }
 
получение массива слушателй
           public ComDataEnableEventListener[] getComDataEnableEventListeners(){
                  return listeners.toArray(new ComDataEnableEventListener[listeners.size()]);
               }
 
удаление слушателя
           public void removeComDataEnableEventListener(ComDataEnableEventListener listener){
                   listeners.remove(listener);
               }
 
генерирования события
           protected void fireDataAvaliableEvent(String message){
                 ComDataEnableEvent ev = new ComDataEnableEvent(this, message);
                 for (ComDataEnableEventListener listener : listeners){
                   listener.DataAvaliableEvent(ev);
                 }
               }
 
На этом создание события завершено. Теперь, чтобы сгенерировать событие необходимо только вызвать функцию fireDataAvaliableEvent, и уведомления будут высланы всем слушателям.

Чтение из консоли

Можно читать из консоли двумя способами:
1. с помощью InputStreamReader, обёрнутого в BufferedReader.
2. с помощью класса Scanner.
 
 
Пример InputStreamReader , BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class ReadConsoleSystem {
  public static void main(String[] args) {
 
  System.out.println("Enter something here : ");
 
  try{
      BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
      String s = bufferRead.readLine();
 
      System.out.println(s);
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
 
  }
}
 
Пример Scanner
import java.util.Scanner;
 
public class ReadConsoleScanner {
  public static void main(String[] args) {
 
    System.out.println("Enter something here : ");
 
     String sWhatever;
 
       Scanner scanIn = new Scanner(System.in);
       sWhatever = scanIn.nextLine();
 
       scanIn.close();            
       System.out.println(sWhatever);
  }
}
 

Еще статьи...

  1. Потоки в Java (java threads)

Администрирование

Сегодня
Вчера
Эта неделя
Прошлая неделя
Этот месяц
Прошлый месяц
Вся статистика
23
3
23
26686
78
219
26739

IP: 3.149.28.5
Время: 2024-09-16 18:38:02
Счетчик joomla