2014-12-27 6 views
3

주 응용 프로그램 사용자 인터페이스를 닫으려고하지만 응용 프로그램을 시작한 내 main() 함수에서 코드를 실행하고 있습니다. 지금 당장 가지고있는 문제는 맥에있다. 비록 윈도우가 보이지 않더라도 프로그램 이름은 맥 메뉴 막대에 그대로 남아있다.응용 프로그램 UI를 닫지 만 main() 코드를 계속 실행하십시오.

그래서 기본적으로 내가 가지고있는 응용 프로그램을 종료 할 것 코드 :

private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 
    //System.exit(0); 
    this.setVisible(false); 

    // Do something here to finish closing application. 
} 

같은 응용 프로그램이 보이는 시작하는 주요 기능 : 내가하는 System.exit를 사용한 경우

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      // NewApplication is a javax.swing.JFrame 
      new NewApplication().setVisible(true); 
     } 
    }); 

    while (true) { 
     // Watch for user to relaunch UI and do lots of other tasks. 
    } 
} 

(0) 전체 JVM을 완전히 정지시키고 while 루프에서 물건을 실행하지 않게됩니다. 주 애플리케이션 UI를 종료하고 메뉴 막대에 표시하는 것을 중지하지만 while 루프 물건을 실행하는 방법을 알아낼 수 없습니다.

내가 이것을하려는 이유는 지속적으로 실행될 필요가 있고 때로는 사용자가 실행중인 항목과 상호 작용하는 사용자 인터페이스를 실행해야하기 때문입니다. while 루프 내부의 요소는 (다른 함수 중에서) 사용자 인터페이스를 다시 시작하려고 시도하는지 확인하고 다시로드합니다. 하나의 옵션은 연속적으로 실행되는 하나의 프로그램을 만들고 사용자 인터페이스와 비 UI 프로그램간에 대화하기 위해 프로세스 간 통신을 사용하는 것이지만 많은 양의 데이터를 앞뒤로 전달해야 해당 옵션이 마음에 들지 않습니다.

+1

http://stackoverflow.com/a/1235994/1291150 원하는 것을 찾았습니까? –

+0

setDefaultCloseOperation (JFrame.DoNothing) const 이름을 기억하지 못합니다. – TacB0sS

+0

Java 프로그램이 OSX 창 관리자와 상호 작용하는 방식을 제어 할 수있는 Apple Java Extensions라는 API가 있습니다. 여전히 존재하지만 애플은이를 비난하고 개발자 사이트에서 문서의 모든 흔적을 제거했다. 그것에 대해 배울 수있는 가장 좋은 방법은 Orange Extensions와 같은 오픈 소스 스텁 라이브러리를 연구하는 것입니다. –

답변

0

쉬운 방법이 아닙니다. 여기에 동일한 문제가있는 몇 가지 옵션이 있습니다.

1) Mac의 작업 표시 줄 (화면의 오른쪽 상단 모서리에 있음)을 사용하여이 작업을 수행 한 다른 프로그램처럼 보입니다. 프로그램에 액세스하는 유일한 방법은 작업 표시 줄의 메뉴를 이용하는 것입니다. UI가 표시 되더라도 작업 표시 줄을 통해 UI에 접근 할 수 있습니다. 이 작업의 단점은 UI가 표시 될 때 Cmd + Tab을 사용하여 창으로 넘어갈 수 없다는 것입니다. Mac 사용자에게는 직관적이지 않습니다. 이 옵션을 사용하려면 명령 줄 옵션 "-Dapple.awt.UIElement ="true ""를 사용하여 java jar 파일을 시작할 수 있습니다. 그러면 프로그램이 항상 메뉴를 표시하지 못하게 할 수 있습니다. 그들은 간 통신 (IPC) 사용을 사용하여 통신합니다. How to hide the Java SWT program icon in the Dock when the application is in the tray

2) 실행이 개 프로그램없이 UI와 다른 하나를 가지고 볼 수있는 사용자가 프로그램을 얻을 수 있습니다. 작업 표시 줄의 아이콘을 만들

파일, 소켓 등등. 프로세스간에 많은 데이터를 전달할 필요가 없다면 좋은 해결책이 될 것입니다 .3) 아마도 모든 UI가 끝나면 JNI를 사용하여 응용 프로그램의 메뉴를 제거 할 수 있습니다. 의에 가깝습니다. 그러나 Mac의 Objective C 언어를 파헤쳐 야합니다. 나는 당신이 실제로 이것을 할 수 있다고 확신 할 수 없다.

관련 문제