Java의 SwingWorker
EDT(이벤트 디스패치 스레드)를 차단하지 않고 Swing에서 장기 실행 작업을 수행하려면 SwingWorker 활용을 고려해 보세요. 이 기사는 "Java의 다른 클래스에서 repaint 호출"에 대한 이전 질문과 관련된 특정 사용 사례를 다루는 것을 목표로 합니다.
SwingWorker 이해
SwingWorker를 사용하면 다음을 실행할 수 있습니다. 작업을 비동기적으로 수행하여 GUI의 응답성을 유지합니다. 백그라운드 작업과 EDT 간의 데이터 교환을 처리합니다.
Java에서 SwingWorker 구현
이전 코드에서 영감을 받은 다음 코드 조각을 고려하세요. 질문:
// **illustrates previous example** import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.SwingWorker; public class SwingWorkerExample { private static void main(String[] args) { // Initialize GUI JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); // Create and add a button to trigger the SwingWorker JButton button = new JButton("Start Async Task"); panel.add(button); f.add(panel); f.pack(); f.setVisible(true); // SwingWorker to perform the task SwingWorker<Integer, Void> worker = new SwingWorker<Integer, Void>() { // executed on a background thread: @Override protected Integer doInBackground() throws Exception { // simulate a heavy task: Thread.sleep(3000); // replace with actual code... return 42; // return an integer result... } // executed on the EDT after doInBackground completes: @Override protected void done() { try { // get the result of the SwingWorker: int result = get(); } catch (Exception ex) { ex.printStackTrace(); } } }; // ActionListener for the button: button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // start the SwingWorker when the button is clicked: worker.execute(); } }); } }
설명:
위 내용은 Java에서 장기 실행 작업을 수행할 때 SwingWorker가 이벤트 디스패치 스레드 차단을 어떻게 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!