2009-08-18 4 views
2

실행 가능한 jar 파일이 있습니다. 일단 시작된 유일한 방법은 작업 관리자로 가서 javaw 프로세스를 끝내는 것입니다. 초보 사용자가 사용할 수있는 UI로 말하면 더 깨끗한 방법으로이를 막을 수 있습니까?실행 가능한 jar 파일 중지

+0

코드에 액세스 할 수 있습니까? 아니면 타사 응용 프로그램입니까? –

+0

전체 애플리케이션을 만들었으므로 코드에 액세스 할 수 있습니다. –

답변

1

코드를 제어하기 때문에 System.exit을 사용하여 종료 할 수있는 GUI가 필요합니다. 또 다른 유용한 기술은 사용자가 Windows에서 X 버튼 (및 다른 시스템에 해당)을 클릭 할 때 발생하는의 windowClosing을 수신하는 것입니다

JButton b = new JButton("Exit"); 
b.setActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
    System.exit(0); 
    } 
} 
+0

글쎄,이 문제는 버튼을 넣을 수있는 GUI 애플리케이션이 없다는 것입니다. 내 jar를 멈추기 위해 다른 GUI 응용 프로그램을 만들 수 있지만이 GUI는 다른 jvm에서 작동하므로 다른 응용 프로그램과의 인터페이스가 불가능할 수도 있습니다. –

1

: 당신이 스윙을 사용하고 경우에 따라서, 당신처럼 뭔가를 할 수 :

addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent e) { 
     System.exit(0); 
    } 
}); 

나는 일반적으로 응용 프로그램의 Frame을 확장하는 클래스의 생성자에 넣습니다. 예를 들어 자사의 서비스 경우 - - 다음은 로컬 네트워크 액세스를 사용할 수있는 응용 프로그램이 GUI가없는 경우

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 
+0

아니면 그냥'setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE)'를하고 여분의'WindowListener'를 피할 수 있습니다. –

+0

글쎄,이 문제는 버튼을 넣을 수있는 GUI 애플리케이션이 없다는 것입니다. 내 jar를 멈추기 위해 다른 GUI 응용 프로그램을 만들 수 있지만이 GUI는 다른 jvm에서 작동하므로 다른 응용 프로그램과의 인터페이스가 불가능할 수도 있습니다. –

+0

사실, 그렇지만 때때로 그런 식으로 통제 할 수없는 정리를해야합니다. – Jonathan

0

: 당신이 JFrame의를 사용하는 경우

, 당신은 또한이 줄을 추가해야합니다 운영 체제가 일반적으로 서비스를 시작하고 중지하는 데 사용하는 표준 IPC (프로세스 간 통신) 메커니즘을 시뮬레이트합니다.

아파치의 풍경 데몬 프로젝트에서 찾을 수의 인기 구현 : 모든 비 데몬 스레드가 종료 한 때 종료됩니다 http://commons.apache.org/daemon/

+0

launch4J를 사용하여 ja 파일을 exe 파일로 마무리했지만 서비스로 사용하려면 Java Service Wrapper를 시도했지만 어떤 이유로 든 작동하지 않습니다. 당신의 링크를 살펴 보겠습니다. 하지만 지금은 내 응용 프로그램이 서비스가 아닙니다. –

+0

서비스 여부와 상관없이 사용자 인터페이스가없는 경우이를 제어하는 ​​가장 좋은 방법은 로컬 네트워크 액세스를 사용하는 것입니다. 로컬 시스템의 연결 만 허용하는 수신 대기 소켓을 열고 별도의 스레드에 명령이 도달하기를 기다립니다. – Jonathan

+0

Commons Daemon은 이미 당신을 위해서 그것을 구현했습니다 - 그들은 그 방법론을 위해 "서버"와 "클라이언트"를 제공합니다. – Guss

0

귀하의 응용 프로그램입니다. 이를 수행하는 방법은 하나의 데몬을 제외한 모든 스레드를 만들고 마지막 스레드를 중지 할 신호를 기다리는 스레드로 만듭니다.

0

마침내 내 문제의 해결책을 발견했습니다. 내가 닫을 수있는 GUI가 없기 때문에 나는 콘솔도 가지고 있지 않다. 가장 좋은 방법은 java.awt 패키지에서 SystemTray API를 사용하는 것입니다. 아이콘을 마우스 오른쪽 버튼으로 클릭하고 종료하십시오.

관련 문제