Spec-Zone.ru › OpenJDK 8

Интерфейс SecondaryLoop


public interface SecondaryLoop

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

Объекты, реализующие этот интерфейс, создаются с помощью метода EventQueue.createSecondaryLoop(). Интерфейс предоставляет два метода, enter() и exit(), которые можно использовать для запуска и остановки цикла обработки событий.

Когда вызывается метод enter(), текущая нить заблокирована до тех пор, пока цикл не будет завершён методом exit(). Кроме того, на нити обработки событий запускается новый цикл обработки событий, который может или не может совпадать с текущей нитью. Цикл можно завершить в любой нити, вызвав его метод exit(). После завершения цикла объект SecondaryLoop может быть повторно использован для запуска нового вложенного цикла обработки событий.

Типичный пример использования этого интерфейса — диалоговые окна AWT и Swing в модальном режиме. При отображении модального диалогового окна на нити обработки событий запускается новый вторичный цикл. Позже, когда диалоговое окно скрыто или удалено, оно выходит из цикла, и нить продолжает свою работу.

Следующий пример демонстрирует простое использование вторичных циклов:

SecondaryLoop loop;

   JButton jButton = new JButton("Button");
   jButton.addActionListener(new ActionListener() {
        @Override
       public void actionPerformed(ActionEvent e) {
           Toolkit tk = Toolkit.getDefaultToolkit();
           EventQueue eq = tk.getSystemEventQueue();
           loop = eq.createSecondaryLoop();

           // Spawn a new thread to do the work
           Thread worker = new WorkerThread();
           worker.start();

           // Enter the loop to block the current event
           // handler, but leave UI responsive
           if (!loop.enter()) {
               // Report an error
           }
       }
   });

   class WorkerThread extends Thread {
        @Override
       public void run() {
           // Perform calculations
           doSomethingUseful();

           // Exit the loop
           loop.exit();
       }
   }
С:
1.7
См. также:
Dialog.show(), EventQueue.createSecondaryLoop(), Toolkit.getSystemEventQueue()

Методы

Модификатор и тип Метод и описание
boolean enter()

Запрещает выполнение текущей нити и переходит в новый вторичный цикл обработки событий на нити обработки событий.

boolean exit()

Разблокирует выполнение нити, заблокированной методом enter(), и выходит из вторичного цикла.

Методы

enter

boolean enter()

Запрещает выполнение текущей нити и переходит в новый вторичный цикл обработки событий на нити обработки событий.

Этот метод может быть вызван любой нитью, включая нить обработки событий. Эта нить будет заблокирована до тех пор, пока не будет вызван метод exit() или цикл не будет завершён. В любом случае, для обработки событий будет создан новый вторичный цикл на нити обработки событий.

Этот метод может запустить только один новый цикл обработки событий за раз для каждого объекта. Если вторичный цикл обработки событий уже запущен этим объектом и в настоящее время всё ещё выполняется, этот метод возвращает false , чтобы указать, что он не смог запустить новый цикл обработки событий. В противном случае этот метод блокирует вызывающую нить и позже возвращает true, когда новый цикл обработки событий завершен. В это время этот объект может снова быть использован для запуска другого нового цикла обработки событий.

Возвращает:
true после завершения вторичного цикла, если вторичный цикл был запущен этим вызовом, false в противном случае

exit

boolean exit()

Разблокирует выполнение нити, заблокированной методом enter(), и выходит из вторичного цикла.

Этот метод возобновляет выполнение нити, которая вызвала метод enter(), и выходит из вторичного цикла, созданного при вызове метода enter().

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

Если этот вторичный цикл не был запущен с помощью метода enter() или этот вторичный цикл уже завершен с помощью метода exit(), этот метод возвращает false, в противном случае возвращается true.

Возвращает:
true если этот цикл был ранее запущен и ещё не завершён методом exit(), false в противном случае

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API