读书人

请教怎么实现按ESC键退出Java程序

发布时间: 2012-12-18 12:43:41 作者: rapoo

请问如何实现按ESC键退出Java程序?
我写了一个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)
{
}



[最优解释]

引用:
谢谢大家帮忙,我按逸飞的代码试了一下,还是不行,不知道问题出在哪?

5L代码是用在GUI程序中的。
[其他解释]
我只会写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);
}
});
}
}

[其他解释]
试试给Form添加这个按钮事件
[其他解释]
试试给Form添加这个按钮事件
[其他解释]
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
.............
});

[其他解释]
添加ESC事件监听
[其他解释]
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);
}
});
}
}


[其他解释]
很简单,你的new button()错了,是new Button(),非常不细心啊LZ
[其他解释]
引用:
Java code
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
.............
});

这个办法最好。监听了所有事件。不管是在哪个componet上,button,form等..
[其他解释]
谢谢大家帮忙,我按逸飞的代码试了一下,还是不行,不知道问题出在哪?
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();
}
}
}
}


[其他解释]
系统监听,你要想在命令行里用么? 关闭dos窗口?
[其他解释]
谢谢大家,Form添加按钮事件也没有试,等不忙的时候我会再试试。

读书人网 >J2SE开发

热点推荐