Spec-Zone.ru › OpenJDK 24

Интерфейс 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, 2025, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.desktop/java/awt/SecondaryLoop.html

Spec-Zone.ru

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