如何通过按退出按钮退出程序?

时间:2014-07-05 00:16:34

标签: java actionlistener keylistener keyboard-hook

在过去的三天里,我花了两个小时进行研究,但无法弄清楚这一点。

这是一个简单的程序,每2.5秒点击鼠标左键50次,然后程序结束。但有时我想通过按退出键(而不是鼠标)来尽快结束程序。

如何通过单击退出按钮结束程序?我不知道我做错了什么。如果可能请提供代码,因为我是Java的新手,并且不了解Java术语。谢谢你的帮助。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class TestClass implements KeyListener, ActionListener
{
   static boolean exit = false;
   public static void main(String[] args) throws AWTException 
   {
      //Creates robot class
      Robot r = new Robot();
      for(int x = 1; x < 50; x++)
      {
         //moves mouse to a cretain point on the screen
         r.mouseMove(789, 326);

         //robot class presses the mouse then realases every 2.5 Seconds
         r.mousePress(InputEvent.BUTTON1_MASK);
         r.mouseRelease(InputEvent.BUTTON1_MASK);
         r.delay(2500);
         System.out.println("This the " + x + "th time."); 
      } 
   }

   //KeyLisener stuff
   @Override
   public void keyPressed(KeyEvent e)
   {
      // TODO Auto-generated method stub
      if(e.getKeyCode() == KeyEvent.VK_ESCAPE)
      {
         System.out.println("The key has been pressed");
         System.exit(0);
      }
   }

   @Override
   public void keyReleased(KeyEvent e){}

   @Override
   public void keyTyped(KeyEvent e){}

   // Action Performed stuff
   @Override
   public void actionPerformed(ActionEvent arg0)
   {
      // TODO Auto-generated method stub
      if (exit = true)
      {
         System.exit(0);
      }
   }

}

2 个答案:

答案 0 :(得分:1)

KeyListener需要监听一个Swing或AWT GUI组件,该组件在具有焦点的GUI中具有焦点,这对于您的情况并非如此。换句话说,KeyListener根本就不能在这里使用。

当您的程序不是GUI或者没有焦点的GUI时,这不是简单的Java任务。一种解决方案是使用JNI或JNA来获取系统键盘钩子,如果您不熟悉操作系统的系统编程,这可能会很棘手。

我在Windows环境中的解决方案通常涉及使用AutoIt或AutoHotKey等实用程序,然后通过套接字将小型实用程序与我的Java程序绑定。所有解决方案都将针对特定平台。

例如,解决类似问题的代码,请参阅我对类似stackoverflow问题here的回答。

答案 1 :(得分:0)

仅对于仍在寻找它的人-我关闭程序的方法非常非常简单:

if(e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.exit(1); }

希望这会有所帮助。