2014-07-05 3 views
1

지난 3 일간 연구에 2 시간을 보냈는데 그 사실을 알 수 없습니다.이스케이프 버튼을 눌러 프로그램을 종료하는 방법은 무엇입니까?

이것은 마우스 왼쪽 버튼을 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); 
     } 
    } 

} 
+0

키 수신기는 별도의 스레드에 있어야합니다. – redFIVE

+0

@redFIVE : 스레드와 관련이 거의 없습니다. KeyListener는 포커스가있는 GUI에 포커스를 둔 Swing 또는 AWT GUI 컴퍼넌트를 청취 할 필요가 있습니다. 원래의 포스터의 질문에는 맞지 않습니다. 즉, KeyListener는 여기서 간단하게 사용할 수 없습니다. –

답변

1

는 모든 KeyListener 초점이있는 GUI에 포커스가 스윙 또는 AWT GUI 구성 요소, 상황에 사실이 아니다 뭔가를들을 필요가있다. 즉, KeyListener는 여기서 간단하게 사용할 수 없습니다.

이것은 프로그램이 GUI가 아니거나 포커스가없는 GUI 일 때 Java로 수행하는 간단한 작업이 아닙니다. 한 가지 해결책은 시스템 키보드 후크를 얻기 위해 JNI 또는 JNA를 사용하는 것입니다. 운영 체제의 시스템 프로그래밍에 익숙하지 않은 경우 까다로울 수 있습니다.

내 Windows 환경의 솔루션은 일반적으로 AutoIt 또는 AutoHotKey와 같은 유틸리티 프로그램을 사용하여 Java 프로그램으로 소켓을 통해 작은 유틸리티 프로그램을 연결합니다. 모든 솔루션은 플랫폼에 따라 다릅니다.

비슷한 문제를 해결하는 코드 예를 들어, 비슷한 stackoverflow 질문 here 내 대답을 참조하십시오.