2011-11-26 2 views
1

저는 현재 작성한 Java 응용 프로그램 용 GUI를 개발 중입니다. 나는 나머지 클라이언트와 GUI를 분리 된 프로세스로 유지하려고한다. 그 배경은 다음과 같습니다.GUI가 별도의 프로세스에 있음

  • 충돌의 위험이 줄어 듭니다. 예 : GUI의 OutOfMemoryError가 나머지 클라이언트를 중단시키지 않습니다.
  • 나는 "무료"API를 얻습니다. 나중에 다른 사람들이 프로그래밍 방식으로 클라이언트에 액세스 할 수있게하려는 경우 GUI에서 사용하는 것과 동일한 API를 사용하도록 할 수 있습니다.
  • SWT에 GUI를 작성 중이며 클라이언트가 IntelliJ를 사용하여 작성되었습니다. Eclipse는 SWT 지원 기능이 훨씬 뛰어나므로 GUI 코드 용 Eclipse와 나머지 용 IntelliJ를 사용할 수 있도록 별도의 SWT 지원을 제공한다.

내 질문은 지금 : 어떤 기술을 사용하여 클라이언트의 인터페이스를 GUI에 표시해야합니까? RMI가 먼저 염두에 두었던 것입니다. 그러나 API 만 Java로 제한하는 단점이 있습니다. 또한 대규모 배포 (예 : 로컬 방화벽을 처리하는 방법)에 RMI가 얼마나 적합한 지 잘 모르겠습니다. 그러나, 나는 그것을 아직 배제하고 싶지 않다.

나는 또한 나뿐만 아니라 일부 배포-요구 사항이 언급해야 :

  • 는 비 관리자를 실행할 수 있어야합니다.
  • 제한적인 로컬 방화벽 제한을 처리 할 수 ​​있어야합니다.
  • 배포는 자동 (대형 소비자 앱)이어야하며 Windows, Mac OS X 및 Linux에서 작동해야합니다.

이러한 제한 사항을 감안할 때 어떤 해결책을 쓰겠습니까?

+0

* "클라이언트 인터페이스를 GUI에 표시하려면 어떤 기술을 사용해야합니까?"* 나는 아마도이 질문을 오해하지만 GUI의 런타임 클래스 경로에 단순히 추가하는 경향이 있습니다. 클래스를 직접 인스턴스화하고 메소드를 사용하는 것은 RMI 또는 유사한 기술을 사용하는 것보다 훨씬 간단합니다. GUI가 충돌하고 클라이언트가 계속 실행되도록 유지하는 것을 이해합니다. 클라이언트를 계속 실행하는 시점은 무엇입니까? –

+0

클라이언트가 백업 프로그램입니다. GUI가 충돌하면 백업을 계속 실행하고 싶습니다. 클래스의 클라이언트 인스턴스에 액세스 할 수 있습니다 .AFAIK, 런타임 클래스 경로 설정으로는 불가능합니다. – Yrlec

+0

* "클라이언트는 백업 프로그램입니다. GUI가 충돌하면 백업을 계속 실행하고 싶습니다. "* 백업을 다시 시작하는 것이 좋지 않습니까? 누군가가 전원 케이블을 통해 PC로 이동하면 어떻게됩니까? B/U API를 별도의 (같은 컴퓨터에서) 프로세스가 도움이되지 않습니다.;) –

답변

2

백엔드가 파이썬에 있었고 GUI가 자바에 있다는 점만 빼고 나는이 같은 상황에 직면했다.

  • 얼마나 유연하고 GUI 및 백엔드 사이의 인터페이스가 될 필요가 세부적 :

    중요한 점을 고려해야한다. GUI에서 한 가지 작업을 수행 할 수 있기를 원하십니까? 5 가지 다른 것들? 10? 50? GUI가 얼마나 밀접하게 결합되어 있는지 - 백엔드에서 개별 메소드를 호출 할 것인가?

  • 출력이 백엔드에서 GUI로 가져 오는 방법. STDOUT 또는 임시 파일에 간단하게 쓸 수 있습니까? 좀 더 정교한 것이 필요합니까?
  • 출력의 형식. XML 또는 JSON이 최선의 방법 일 수 있음을 나타내는 이상적으로 쉽게 파싱 할 수 있어야합니다.

이 유용 할 수 있습니다. 이는 프로그램을 개별적으로 원격으로 호출 할 때 사용하는 표준입니다.


무엇이 가장 좋을 지 말하기가 어렵습니다. 필자는 RPC를 피하면서 백엔드에 간단한 명령 줄 인터페이스를 제공했습니다. 출력은 임시 파일과 STDERR에 JSON 객체로 기록되었습니다. 이것이 프로그램 사이의 인터페이스를 매우 간단하고 단절되지 않게 유지했기 때문에 이것이 좋은 결정이라고 생각합니다.

관련 문제