SwingWorker en Java
Pour effectuer des tâches de longue durée dans Swing sans bloquer le fil de répartition d'événements (EDT), envisagez d'utiliser SwingWorker. Cet article vise à répondre à un cas d'utilisation spécifique lié à une question précédente sur "Appeler repaint depuis une autre classe en Java."
Comprendre SwingWorker
SwingWorker vous permet d'exécuter tâches de manière asynchrone, gardant l'interface graphique réactive. Il gère l'échange de données entre la tâche en arrière-plan et l'EDT.
Implémentez SwingWorker en Java
Considérez l'extrait de code suivant, inspiré du précédent question :
// **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(); } }); } }
Explication :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!