请问如何实现按ESC键退出Java程序?

postgraduatetw 2011-08-14 03:53:52
我写了一个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)
{
}


...全文
1442 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
postgraduatetw 2012-11-28
  • 打赏
  • 举报
回复
谢谢大家,Form添加按钮事件也没有试,等不忙的时候我会再试试。
huntor 2012-11-18
  • 打赏
  • 举报
回复
引用 8 楼 postgraduatetw 的回复:
谢谢大家帮忙,我按逸飞的代码试了一下,还是不行,不知道问题出在哪?
5L代码是用在GUI程序中的。
zqfddqr 2012-11-18
  • 打赏
  • 举报
回复
系统监听,你要想在命令行里用么? 关闭dos窗口?
li810622 2012-11-17
  • 打赏
  • 举报
回复
试试给Form添加这个按钮事件
postgraduatetw 2012-11-17
  • 打赏
  • 举报
回复
谢谢大家帮忙,我按逸飞的代码试了一下,还是不行,不知道问题出在哪?
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();
			}
		}
	}
}
huntor 2011-08-15
  • 打赏
  • 举报
回复
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);
}
});
}
}
Mybeautiful 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huntor 的回复:]

Java code
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
.............
});
[/Quote]
这个办法最好。监听了所有事件。不管是在哪个componet上,button,form等..
  • 打赏
  • 举报
回复
很简单,你的new button()错了,是new Button(),非常不细心啊LZ
周靖峰 2011-08-14
  • 打赏
  • 举报
回复
我只会写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);
}
});
}
}
luohuijun619 2011-08-14
  • 打赏
  • 举报
回复
添加ESC事件监听
阳明 to life 2011-08-14
  • 打赏
  • 举报
回复
试试给Form添加这个按钮事件
huntor 2011-08-14
  • 打赏
  • 举报
回复
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
.............
});

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧