我写了一个Java控制台小程序,运行后为连续运行,请问如何实现按ESC键结束程序?我尝试用键盘事件,好像不是随便一个对象就可以做事件源,我就选了个按钮,然后加上监听器,实现方法后,还是不能实现这个功能,不知道问题出在哪。我是初学,请各位老师帮忙,谢谢。
...
//加入事件源和监听
Button button=new button();
button.addKeyListener(this);
...
//实现键盘按下方法
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode==KeyEvent.VK_ESCAPE)
   System.exit(0);
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}

解决方案 »

  1.   

    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
        .............
    });
      

  2.   

    我只会写GUI版的,控制台版的不会,试了1楼的方法也没有成功import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TestFrame extends JFrame
    {
    public TestFrame()
    {
    addKeyListener(new KeyAdapter()
    {
    public void keyPressed(KeyEvent event)
    {
    if (event.getKeyCode() == KeyEvent.VK_ESCAPE)
    {
    System.exit(0);
    }
    }
    });
    }

    public static void main(String[] args)
    {
    EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    JFrame frame = new TestFrame();
    frame.setSize(400, 300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    });
    }
    }
      

  3.   

    import java.awt.AWTEvent;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Toolkit;
    import java.awt.event.AWTEventListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JFrame;public class Escape {
        public static void main(final String[] args) {
            java.awt.EventQueue.invokeLater(new Runnable(){
                    public void run(){
                        final JFrame frame = new JFrame("Example");                    final Toolkit toolkit = Toolkit.getDefaultToolkit();
                        toolkit.addAWTEventListener(new AWTEventListener(){
                                @Override public void eventDispatched(AWTEvent e){
                                    if (e.getID() == KeyEvent.KEY_PRESSED) {
                                        KeyEvent evt = (KeyEvent) e;
                                        if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                                            frame.dispose();
                                            System.exit(0);
                                        }
                                    }
                                }
                            },AWTEvent.KEY_EVENT_MASK);                    frame.setPreferredSize(new Dimension(600,400));
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setLocationByPlatform(true);
                        frame.pack();
                        frame.setVisible(true);
                    }
                });
        }
    }
      

  4.   

    很简单,你的new button()错了,是new Button(),非常不细心啊LZ
      

  5.   

    这个办法最好。监听了所有事件。不管是在哪个componet上,button,form等..
      

  6.   

    谢谢大家帮忙,我按逸飞的代码试了一下,还是不行,不知道问题出在哪?
    import java.awt.AWTEvent;
    import java.awt.Toolkit;
    import java.awt.event.AWTEventListener;
    import java.awt.event.KeyEvent;public class ESCPressedEvent { public static void main(String[] args) {

    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
    {
    @Override
    public void eventDispatched(AWTEvent e)
    {
    if (e.getID() == KeyEvent.KEY_PRESSED) 
    { KeyEvent evt = (KeyEvent) e;
       if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) 
       {System.exit(0);}                                 

    }
    },AWTEvent.KEY_EVENT_MASK);
            for(int i=1;i>0;i++)
    {   
    System.out.println(i+'\n');
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }
      

  7.   

    5L代码是用在GUI程序中的。  
      

  8.   

    系统监听,你要想在命令行里用么? 关闭dos窗口?
      

  9.   

    谢谢大家,Form添加按钮事件也没有试,等不忙的时候我会再试试。