Java listeners and threads

События в Java

Java – язык программирования, который популярен у современных разработчиков. На Джаве создают как небольшие программы, так и крупные проекты. Пример – Minecraft.

Чтобы хорошо разбираться в программировании, необходимо знать классы, методы, а также способы их применения. Немаловажный момент – это события. Именно о них зайдет речь далее. Информация пригодится как новичкам, так и опытным разработчикам.

Описание событий

В Google можно отыскать немало полезной информации о том, как пользоваться Java. События и слушатели здесь играют далеко не последнюю роль. Особенно это касается программного обеспечения для бизнеса и разнообразных структур. При разработке игр они тоже применяются весьма успешно.

Event Java – это объект, описывающий корректировку состояния источника, с которым связан ивент. Наглядные примеры:

  • нажатие на кнопку;
  • выбор элемента из предложенного списка;
  • ввод символов при помощи клавиатуры.

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

Описание слушателей

Изучая рассматриваемую тему по Google, можно заметить еще один элемент – это Listener. Слушатель – уведомляемый о том или ином событии объект. Для того, чтобы Listeners могли реагировать на Java Events, требуется провести его предварительную регистрацию. Так называется процедура подключения слушателя к источнику.

Listener должен отвечать за реализацию разного рода методов для получения и обработки уведомлений о событиях. Также необходимо запомнить, что:

  • по данным Google, слушатель находится в постоянном ожидании, пока в источнике не произойдет заданное ранее событие;
  • рассматриваемый элемент получает объект события, чтобы правильно выдавать реакцию;
  • источник будет вызывать метод-обработчик ивента, определенный в классе, являющемся блоков прослушки;
  • в виде блоков прослушивания можно задействовать внутренние классы.
Читайте также:  Stop python script console

Когда ивент обработался, слушатель осуществляет возврат управления. Это помогает вызывать лишь те listeners, которые «подписались» на java event.

Разновидности слушателей и событий

Google поможет понять, как правильно создавать ПО на Джаве. Там же находится ключевая информация о событиях и слушателях Java. Пакет java.awt.event обладает определением интерфейсов слушателей для каждого из определенного в нем типов ивентов.

Все listener’s interfaces — это расширения интерфейса java.util.EventListener. В нем не происходит определение методов, но он выступает в качестве «базы». В нем указываются все слушатели событий как таковые. Они будут наследоваться от интерфейса EventListener, а также предназначаться для обработки конкретного типа ивентов.

Listener, согласно данным Google, способен содержать один или несколько методов, принимающих объект event в виде единственного параметра. Вызываются в определенных случаях.

Интерфейс слушателя событий Listener может предусматривать несколько методов. Пример – класс ивентов, подобный MouseEvent, описывает несколько операций, которые связаны с мышью. Сюда относят нажатие и отпускания ПКМ и ЛКМ. Для соответствующего слушателя будут вызываться отдельные методы.

Табличка, представленная выше – это типы событий, которые определены в java.awt.event. Здесь же указаны соответствующие им слушатели и методы, определенные в каждом из interfaces.

В качестве корня иерархического типа, как говорит Google, выступает суперкласс EventObject из пакета java.util. Этот класс предусматривает несколько методов:

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

Адаптеры

В Java есть классы-адаптеры. Они, согласно Google, помогают, когда у листенера несколько methods, но просмотреть необходимо один или два из них. Adapters гораздо проще реализовать, чем весь interface в Java.

При применении адаптера возникает необходимость в определении желаемых methods. Если задействована прямая реализация interfaces в Java, то, по Google, требуется определение всех методов. Даже тех, что в соответствующем блоке кодификации не нужны.

Пример класса-адаптера действий с мышью:

Google указывает, что адаптеров всего 7 штук. Кроме уже использованных трех есть еще и:

Все это пригодится каждому разработчику в процессе коддинга.

Ивенты и визуальные элементы AWT

А вот таблица, которая продемонстрирует перечень визуальных элементов пакета AWT, а также ивентов, которые они порождают. Соответствующий список удастся с легкостью обнаружить в Google.

Листенер – как зарегистрировать

Keyevent – один из ключевых вариантов ивентов в Java. Перед рассмотрением соответствующего примера стоит выяснить, как зарегистрировать листенер. Для этого применяются специальные methods. Их имена имеют форму: addXXXListener(XXXListenet listener) или setXXXListener(XXXListener listener), шде XXX – это имя ивента, а listener – ссылка на слушателя.

package test; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class TestFrame extends JFrame < private static final long serialVersionUID = 1L; private JTextField textField; private JButton button1; private JButton button2; private JButton button3; public TestFrame() < super("Test frame"); createGUI(); >public void createGUI() < setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); button1 = new JButton("Button 1"); button1.setActionCommand("Button 1 was pressed!"); panel.add(button1); button2 = new JButton("Button 2"); button2.setActionCommand("Button 2 was pressed!"); panel.add(button2); button3 = new JButton("Button 3"); button3.setActionCommand("Button 3 was pressed!"); panel.add(button3); textField = new JTextField(); textField.setColumns(23); panel.add(textField); ActionListener actionListener = new TestActionListener(); button1.addActionListener(actionListener); button2.addActionListener(actionListener); button3.addActionListener(actionListener); getContentPane().add(panel); setPreferredSize(new Dimension(320, 100)); >public class TestActionListener implements ActionListener < public void actionPerformed(ActionEvent e) < textField.setText(e.getActionCommand()); >> public static void main(String[] args) < javax.swing.SwingUtilities.invokeLater(new Runnable() < public void run() < JFrame.setDefaultLookAndFeelDecorated(true); TestFrame frame = new TestFrame(); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); >>); > >

В Google полно подобных примеров.

Программный вызов

Еще один момент, достойный внимания перед изучением примера keyevent в Java, который можно рассмотреть при помощи Google – это вызов ивента через программу. На основании предыдущей кодификации можно внести следующие корректировки:

public class TestActionListener implements ActionListener < public void actionPerformed(ActionEvent e) < JButton button = (JButton) e.getSource(); System.out.println (button.getText() + ", " + e.getActionCommand()); if (e.getSource() != button3) < textField.setText(e.getActionCommand()); >else < ActionEvent e1 = new ActionEvent(button2, Event.MOUSE_DOWN, "Button 2 was pressed programmatically!"); Action Listener[] listeners; listeners = button2.getActionListeners(); listeners[0].actionPerformed(e1); >> >

После того, как клиент нажмет на button3, в консоли появится такая картинка:

Пример KeyEvent

В Google полно examples применения KeyEvent. Описание соответствующих компонентов и методов уже было рассмотрено. Теперь стоит изучить наглядные коды. Каждый example будет отвечать за определенные операции:

  • В Google удастся обнаружить короткие нажатия.

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

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

Источник

Threads and Listeners

send pies

posted 19 years ago

  • Report post to moderator
  • I understand how thread work, and I understand how listeners work.
    But I get confused when I see listeners that are also threads.
    (Code that implements the runnable interface and a listener interface.)
    If the listener is listening for a certain action, the corresponding method for the action is called when the action occurs.
    When is the run method called if the thread does nothing but sit and listen?
    What will happen if the tread is asleep when the action occurs?
    Will the run method ever try to run while one of the action methods is running?

    author and iconoclast

    Chrome

    send pies

    posted 19 years ago

  • Report post to moderator
  • A Thread object (or a Runnable object) is just a plain old object. No magic about it. When the run() method of one of these is called, it’s generally going to be called in its own thread. If any of the other methods are called, they’re going to run in the thread that calls them.
    So let’s say you’ve got a Runnable, and its been handed to a Thread and start() has been called — so its run() method is running.
    Now let’s also say that you’ve got a reference to that Runnable, and you want to call, say, toString() on it. No problem, you call that method. Does toString() run in the thread that run() is on? Nope, it runs in the caller’s thread — just like you’d expect.
    OK, now, let’s say that the Runnable is also an ActionListener, and it’s registered with a JButton. Somebody presses the button, and actionPerformed() gets called on the Runnable/ActionListener. The actionPerformed method runs on the GUI event thread — the fact that the Runnable/ActionListener’s run() method is running on some other thread has nothing to do with it.
    So the answers to your questions are
    1) Never. If you don’t give the Runnable to a Thread and call start(), run() won’t get called.
    2) Nothing special. The Runnable and ActionListener «personalities» are independent.
    3) Yes, absolutely.
    Generally, such an object would have some means of communicating between its » personalities» — at the very least, a member variable that is changed by the event listener and read by the Runnable, so that an event occurring has some effect on how the run() method acts.

    Источник

    Оцените статью