2012-04-04 5 views
2

나는이 사이트와 Google에서 둘 다 검색했지만 어느 정보도 찾을 수 없었습니다. Mac OS에서 .app 파일을 실행하는 Java 응용 프로그램이 있습니다. 이제 .app 확장자는 실행 파일이 아니라 "/ Contents/MacOS /"하위 디렉토리에있는 실행 파일을 포함하는 응용 프로그램 번들이라는 것을 이해합니다.Java 응용 프로그램에서 실행되는 MacOS 응용 프로그램 번들의 작업 디렉토리를 어떻게 설정합니까?

예를 들어서 "/Applications/Chess.app"앱을 사용합니다. 따라서이 경우 실제 실행 파일은 "/Applications/Chess.app/Contents/MacOS/"에 있습니다.

단순히 작업 디렉토리를 "/Applications/Chess.app/Contents"로 설정하면됩니까? /맥 OS/"?

+0

Desktop.getDesktop(). open ("/ Applications/Chess.app")' –

+0

예, 현재 내 코드에서 사용하고있는 것과 같습니다. 정상적으로 작동합니다. 그러나 나는 올바른 작업 디렉토리가 지정 될 필요가있는 응용 프로그램이있을 것이라고 생각했습니다. 예를 들어, Java 응용 프로그램은 Windows에서 .exe 파일을 시작하며 특정 Windows 응용 프로그램은 작업 디렉토리가 .exe 파일의 위치로 설정된 경우에만 작동합니다. 그래서 저는 맥 오에스가 같은 문제에 부딪 힐 수도 있다고 생각했습니다. – drumhead

답변

1

Mac 응용 프로그램은 일반적으로 특히 작업 디렉토리에 무엇이 설정되어 있는지 의존 할 수 없습니다. Xcode는 그것을 한 방향으로 설정합니다. Finder에서 시작하면 다른 방법으로 설정됩니다 (보통 /).

그러나 Contents/MacOS에서 바이너리를 실행하여 앱을 실행해서는 안됩니다. Launch Services 나 NSWorkspace (또는 그 중 하나 인/usr/bin/open)를 사용하여 시작해야합니다.

+0

두 번째 질문에 나는 왜 그런지 물을 수 있습니까? Contents/MacOS에서 바이너리를 실행하면 터미널에서 직접 출력을 읽을 수 있습니다. 나는 이것이 불리한 점을 알기에는 흥미 롭지 만, 이것은 잘못된 것이라고 느낀다. – wardw

+1

@wardw : 좋습니다. OP는 하나의 앱이 사용자를 위해 다른 방식으로 출시되는 것에 대해 이야기하고있었습니다. 앱이 그렇게해서는 안됩니다. 그것은 발사 서비스를 사용해야합니다. 예를 들어 일반적으로 사용자는 앱이 실행중인 인스턴스가 여러 개있을 것으로 기대하지 않습니다. 실행 서비스를 사용하면 실행중인 인스턴스를 직접 실행하는 대신 우연히 그렇게 할 수 있습니다. –

0

[dictionary] "Java"에서 문자열 모드로 설정된 "WorkingDirectory"[key] 아래의 "$ APP_PACKAGE/Contents/..."[value]를 사용합니다. 희망이 도움이됩니다.

사용자가 위치를 변경하려고 했으므로 앱의 크기가 기하 급수적으로 늘어나지 만 모든 콘텐츠를 삭제해도 결코 줄어들지 않으므로 일하는 중입니다. 그것의 측면은 그것이 어떻게되는지 말해. 행운을 빌어.