2014-06-16 2 views
5

저는 브라우저의 일부 클릭 작업을 자동화하기 위해 Java의 Robot 클래스를 사용 중입니다. 첫 번째 클릭에서 Java 응용 프로그램은 포커스를 잃습니다. 로봇이 오작동하는 경우 프로그램을 종료하고 싶습니다. 그러나 로봇이 마우스를 제어 할 수 있기 때문에 쉽게 그렇게 할 수 없습니다.불량 로봇을 죽일 수있는 방법은 무엇입니까?

내 프로그램에서 종료 신호를 내게 들려주는 신호를 듣고 싶습니다. 예를 들어 "이탈"키를 누르면 프로그램이 종료 될 수 있습니다. 그러나 응용 프로그램에 포커스가 없을 때 키 입력을 수신하는 방법을 모르겠습니다.

OSX 10.9에서 Java SE 6을 실행하고 있습니다.

이러한 상황에서 어떻게 프로그램을 종료 할 수 있습니까?

편집 : 게시 한 후 동일한 문제를 해결하는 관련 질문을 발견했습니다 : Listening for input without focus in Java. (그러나 정확한 질문은 아니기 때문에 질문에 대한 답변이 정확하지 않습니다.)

+1

"브라우저 창에서 일부 작업을 자동화하십시오."[Selenium] (http://docs.seleniumhq.org/)을 사용해 보셨습니까? – NiziL

+0

나는 당신이 그것을 할 수 있다고 생각하지 않는다 ... 나는 특정 키 조합을 위해 키보드를 듣는 것을 의미 할 것이고, 이것은 평범한 자바에서는 불가능하다. JNI/JNA를 사용하고이 키 조합을 처리하기 위해 네이티브 레이어를 코딩 할 수 있습니다. – BackSlash

+0

@ Nizil 브라우저는 예제 일뿐입니다. 로봇이 모든 응용 프로그램과 상호 작용할 수 있습니다. 내가 관심을 갖는 질문은 로봇이 무엇을하던간에 인터럽트하는 방법이다. – augurar

답변

7

Robot (또는 일정한 간격으로) 전화를 걸기 전에 마우스 위치를 확인하는 것이 좋습니다 어떤 위치에 있던지 마지막으로 mouseMove 'd. 불일치가 발견되면 예외가 발생합니다. 그런 식으로 마우스를 수동으로 움직이면 사물을 종료 할 수 있습니다.

아마도 항상 확인하기 위해 Robot을 감싸는 것이 가장 좋습니다. SecondLawObeyingRobot을 제안합니다.

+0

매우 영리합니다! 중요한 순간 ​​(예 : 로봇이 마우스 버튼을 누르는 동안)에 마우스를 움직이면 약간의 문제가 발생할 수 있지만, 이는 내 용도로만 작용할 수 있다고 생각합니다. – augurar

+0

'mouseRelease'가 대부분의 문제를 피하기 전에 불일치가 발견되면'escape '키 누르기를 삽입하십시오. 적어도 Windows에서는 (OSX에 대해 확실하지 않은)'escape'는 끌기를 취소합니다. – Sneftel