>Java >java지도 시간 >SwingWorker는 Java에서 GUI 정지를 어떻게 방지할 수 있습니까?

SwingWorker는 Java에서 GUI 정지를 어떻게 방지할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-22 15:38:14456검색

How Can SwingWorker Prevent GUI Freezes in Java?

Java에서 SwingWorker 사용

소개

이벤트 디스패치에서 실행되는 장기 실행 작업 스레드는 GUI를 정지시킬 수 있습니다. 이 문제는 별도의 스레드에서 이러한 작업의 실행을 지원하는 SwingWorker를 사용하여 해결할 수 있습니다.

SwingWorker 사용 방법

  1. 정의 SwingWorker의 하위 클래스: 하위 클래스는 장기 실행 작업이 실행되는 doInBackground 메서드를 정의해야 하며, 작업이 완료되면 호출되는 done 메서드.
  2. SwingWorker 실행: 실행 메서드는 별도의 스레드에서 SwingWorker를 시작하는 데 사용됩니다. 이를 버튼 클릭과 같은 이벤트에 연결할 수 있습니다.
  3. 결과 처리: get 메소드를 사용하여 작업이 완료된 후 결과를 검색할 수 있습니다. 이는 done 메소드나 SwingWorker를 시작한 이벤트 핸들러에서 수행할 수 있습니다.

이 예에서는 SwingWorker를 사용하여 수행합니다. 시간이 많이 걸리는 작업을 수행하고 1초 후에 결과가 포함된 메시지 상자를 표시합니다.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SwingWorkerExample {

    private static void makeGUI() {
        final JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new FlowLayout());

        class AnswerWorker extends SwingWorker<Integer, Integer> {
            protected Integer doInBackground() throws Exception {
                Thread.sleep(1000);
                return 42;
            }

            protected void done() {
                JOptionPane.showMessageDialog(f, get());
            }
        }

        JButton b = new JButton("Answer!");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new AnswerWorker().execute();
            }
        });

        f.getContentPane().add(b);
        f.getContentPane().add(new JButton("Nothing"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SwingWorkerExample::makeGUI);
    }
}

위 내용은 SwingWorker는 Java에서 GUI 정지를 어떻게 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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