在Java中,ActionListener主要用于處理按鈕點擊等同步事件。對于異步事件,您需要使用其他方法,例如使用SwingUtilities.invokeLater()或者CompletableFuture。
以下是使用SwingUtilities.invokeLater()處理異步事件的示例:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AsyncActionListenerExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Async ActionListener Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JButton button = new JButton("Click me!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 這里執行異步操作
CompletableFuture.runAsync(() -> {
System.out.println("異步任務開始...");
try {
Thread.sleep(3000); // 模擬耗時操作
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println("異步任務結束...");
});
}
});
frame.getContentPane().add(button);
frame.setVisible(true);
});
}
}
在這個示例中,我們使用SwingUtilities.invokeLater()確保在事件調度線程(Event Dispatch Thread, EDT)上創建和顯示GUI。當用戶點擊按鈕時,ActionListener會觸發一個異步任務,該任務將在3秒后完成。
如果您需要處理更復雜的異步操作,可以使用CompletableFuture類。這是一個更高級的異步編程工具,可以讓您更容易地處理異步任務的結果和異常。