私は多くのことを試しましたが、何もうまくいかないようです。エスケープを押したときにこのプログラムを終了させるのを手伝ってくれる人はいますか? 私はスレッドの経験があまりないので、それが私の欠点の 1 つかもしれません。
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main implements ActionListener {
    public static boolean start = false;
    public static void Start() {
        final JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JLabel label = new JLabel("Choose Action:");
        JLabel label2 = new JLabel("Hello");
            JButton button1 = new JButton("Start");
        button1.addActionListener(new ActionListener() { 
              public void actionPerformed(ActionEvent e) {
                Robot robot = null;
                try {
                    robot = new Robot();
                } catch (AWTException e1) {
                    e1.printStackTrace();
                }
                start = true;
                System.out.println("Pressed");
                    while(start) {
                           robot.keyPress(KeyEvent.VK_W);
                           try{
                            Thread.sleep(1);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyRelease(KeyEvent.VK_W);
                        try{
                            Thread.sleep(150);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyPress(KeyEvent.VK_S);
                        try{
                            Thread.sleep(1);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyRelease(KeyEvent.VK_S);
                        try{
                            Thread.sleep(150);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyPress(KeyEvent.VK_A);
                        try{
                            Thread.sleep(1);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyRelease(KeyEvent.VK_A);
                        try{
                            Thread.sleep(150);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyPress(KeyEvent.VK_D);
                        try{
                            Thread.sleep(1);
                        } 
                        catch(Exception ex) {
                        }
                        robot.keyRelease(KeyEvent.VK_D);
                        try{
                            Thread.sleep(150);
                        } 
                        catch(Exception ex) {
                    }
                }
              } 
            } );
        JButton button2 = new JButton("Exit");
        button2.addActionListener(new ActionListener() { 
              public void actionPerformed(ActionEvent e) { 
                  start = false;
                frame.dispose();
                System.exit(0);
              } 
            } );
        frame.setTitle("Test");
        frame.setSize(350, 100);
        frame.setResizable(false );
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.add(panel);
        panel.add(label);
        panel.add(button1);
        panel.add(button2);
        panel.add(label2, BorderLayout.SOUTH);
    }
    public static void main (String args[]) throws InterruptedException {
        Start();
    }
    @Override
    public void actionPerformed(ActionEvent arg0) {
    }
}
私は正直ここで途方に暮れています。どんな助けでも事前に感謝します。