SwingWorker in Java
Um lang laufende Aufgaben in Swing auszuführen, ohne den Event Dispatch Thread (EDT) zu blockieren, sollten Sie die Verwendung von SwingWorker in Betracht ziehen. Dieser Artikel befasst sich mit einem spezifischen Anwendungsfall im Zusammenhang mit einer früheren Frage zum „Aufrufen von Repaint aus einer anderen Klasse in Java“.
SwingWorker verstehen
SwingWorker ermöglicht die Ausführung Aufgaben asynchron ausführen und die GUI reaktionsfähig halten. Es übernimmt den Datenaustausch zwischen der Hintergrundaufgabe und dem EDT.
Implementieren Sie SwingWorker in Java
Bedenken Sie den folgenden Codeausschnitt, der vom vorherigen inspiriert ist Frage:
// **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(); } }); } }
Erklärung:
Das obige ist der detaillierte Inhalt vonWie kann SwingWorker das Blockieren des Event-Dispatch-Threads verhindern, wenn in Java lang laufende Aufgaben ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!