>Java >java지도 시간 >여러 SwingWorker를 관리하고 라벨을 효율적으로 업데이트하는 방법은 무엇입니까?

여러 SwingWorker를 관리하고 라벨을 효율적으로 업데이트하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-11 16:14:11279검색

How to Manage Multiple SwingWorkers and Update Labels Efficiently?

여러 SwingWorker를 기다리는 중

이 질문은 각각 레이블 업데이트를 담당하는 여러 SwingWorker를 생성하고, 업데이트가 완료되면 모든 레이블을 제거하는 방법을 묻습니다. 모든 작업자가 작업을 완료했습니다.

한 가지 해결책은 스레드가 다음을 기다릴 수 있도록 하는 CountDownLatch를 사용하는 것입니다. 실행을 재개하기 전에 작업을 완료하기 위해 지정된 수의 다른 스레드. 제공된 코드에서 각 작업자는 완료 시 래치.countDown()을 호출하는 반면 감독자 작업자는 모든 작업이 완료될 때까지 래치.await()를 차단합니다. 그런 다음 감독자는 레이블을 업데이트하거나 완전히 제거합니다(후자의 옵션은 일반적으로 매력적이지 않습니다).

다음은 이 접근 방식을 보여주는 향상된 코드 예제입니다.

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.*;

/**
* @see https://stackoverflow.com/a/11372932/230513
* @see https://stackoverflow.com/a/3588523/230513
*/
public class WorkerLatchTest extends JApplet {

    private static final int N = 8;
    private static final Random rand = new Random();
    private Queue<JLabel> labels = new LinkedList<JLabel>();
    private JPanel panel = new JPanel(new GridLayout(0, 1));
    private JButton startButton = new JButton(new StartAction("Do work"));

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();

위 내용은 여러 SwingWorker를 관리하고 라벨을 효율적으로 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.