SwingWorker in Java implementieren
In einer früheren Frage zum Neuzeichnen aus einer anderen Klasse wurde das Konzept von SwingWorker erwähnt. In diesem Artikel soll die Verwendung von SwingWorker erläutert werden, insbesondere im Kontext des in der ursprünglichen Frage bereitgestellten Codeausschnitts.
SwingWorker verstehen
SwingWorker ist eine Dienstprogrammklasse in Java, das die Ausführung zeitaufwändiger Aufgaben in Swing-Anwendungen erleichtert. Dadurch können diese Aufgaben in einem separaten Thread ausgeführt werden, wodurch verhindert wird, dass die GUI blockiert.
SwingWorker implementieren
Zur Verwendung von SwingWorker, einer neuen Klasse, die es erweitert erstellt werden sollte. In dieser Klasse sollte Folgendes implementiert werden:
Zum Beispiel:
class AnswerWorker extends SwingWorker<Integer, Integer> { @Override protected Integer doInBackground() throws Exception { // Perform a time-consuming task here. Thread.sleep(1000); return 42; } @Override protected void done() { try { // Display the result of the task in a message box. JOptionPane.showMessageDialog(f, get()); } catch (Exception e) { e.printStackTrace(); } } }
SwingWorker aufrufen
Um den SwingWorker aufzurufen, rufen Sie seine Methodeexecute() auf. Typischerweise kann dies über einen Event-Handler wie einen ActionListener erfolgen:
JButton b = new JButton("Answer!"); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AnswerWorker().execute(); } });
Beispiel:
Der folgende Code demonstriert die Verwendung von SwingWorker in einfacher Form GUI-Anwendung:
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingWorker; public class SwingWorkerExample { public static void main(String[] args) { makeGUI(); } private static void makeGUI() { final JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().setLayout(new FlowLayout()); // Create and invoke SwingWorker. JButton answerButton = new JButton("Answer!"); answerButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AnswerWorker().execute(); } }); f.getContentPane().add(answerButton); f.pack(); f.setVisible(true); } private static class AnswerWorker extends SwingWorker<Integer, Integer> { @Override protected Integer doInBackground() throws Exception { // Perform a time-consuming task. Thread.sleep(1000); return 42; } @Override protected void done() { try { // Display the result of the task in a message box. JOptionPane.showMessageDialog(f, get()); } catch (Exception e) { e.printStackTrace(); } } } }
Durch die Verwendung von SwingWorker auf diese Weise bleibt die GUI reaktionsfähig, während die zeitaufwändige Aufgabe ausgeführt wird eseguito im Hintergrund.
Das obige ist der detaillierte Inhalt vonWie kann SwingWorker die Reaktionsfähigkeit in Java Swing-Anwendungen verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!