2011-03-31 2 views
1

자바 스텁을 사용하지 않고 정보 스크립트를 통해 등록 된 셸 스크립트 인 OSX 응용 프로그램 묶음이 있습니다.JavaStub을 사용하는 Java OSX 용 파일 연결에 대한 파일 연결

… 
<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>My File Type Name</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeExtensions</key> 
     <array> 
      <string>ext1</string> 
      <string>ext2</string> 
     </array> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>CFBundleTypeMIMETypes</key> 
     <array> 
      <string>application/ext1</string> 
      <string>application/ext2</string> 
     </array> 
    </dict> 
</array> 
… 

이것은 LaunchService 내 파일과 내 프로그램에 대한 연결을 인식 가질 필요했던 것입니다 : 나는 또한의 Info.plist에서 내 파일 확장자를 등록했다.

지금까지 내가 지금과 같이 앱-아이콘에 드래그하여 파일을 열어이 자바에서 파일 열기 핸들러를 등록 할 필요가 애플 (STABLE)의 문서를 이해 (자바 6 업데이트 3 일 현재) :

 Application.getApplication().setOpenFileHandler(new OpenFilesHandler() { 

      @Override 
      public void openFiles(OpenFilesEvent arg0) { 
       Debug.debug("Opening a bunch of files on osx."); 
       for(File file : arg0.getFiles()) { 
        Debug.debug("Opening: " + file.getAbsolutePath()); 
        // Custom open action 
        FileActions.openFile(file); 
       } 
      } 
     }); 

첫 번째 문제는 다음과 같습니다.이 핸들러는 결코 적중되지 않습니다. 디버그 메시지가없고 파일이 열리지 않습니다.

두 번째 문제는 관련이 있습니다. 관련 파일을 두 번 클릭하면 실행되지 않는 경우 앱이 열립니다. 내가 맞춤형 셸 스크립트를 사용하여 응용 프로그램을 시작 했으므로 매개 변수를 추가해야한다고 생각했습니다. 먼저이 내 startscript입니다 : 테스트 목적

#!/bin/bash 
BASEDIR=$(dirname "$0") 
cd "$BASEDIR/../Resources/Java/" 
java -Xdock:icon="../ico.icns" -Xmx256m -jar "core/myjar.jar" 

내가 내 인수 목록에 '$ 1'추가 - $ 1 내가 PSN에 파일 열기의 이벤트를 연결 할 방법은 시스템에서 PSN은 ...입니다 - 또는이 (커스텀 쉘 스크립트를 사용하는) 다른 방법.

답변

0

AFAIK 용 셸 스크립트를 사용할 수 없습니다. 열린 파일은 AppleEvents를 사용하여 전송되며 bash는이를 수신 할 수 없습니다.

+0

그러나 파일 아이콘 위로 파일을 드래그하는 문제를 해결하거나 설명하지는 않습니다. – gamma

+0

Finder가 응용 프로그램에 일부 파일을 열라고 말하고 싶을 때 끌기, 두 번 누르기 등의 작업을 통해 응용 프로그램에 AppleEvent (IPC 형식)를 보냅니다. 귀하의 경우 응용 프로그램은 셸 스크립트이지만 AppleEvent 수신 방법을 모르기 때문에 처리되지 않은 상태로 앉아 있습니다. 실행 파일을 받아서 처리를 위해 Java 프로그램에 전달하는 실행 파일이 필요합니다. 일종의 "Java 스텁"일 수 있습니다. – LaC

+0

자, 쉘 스크립트 대신 JavaApplicationStub를 구현했습니다. 작동 할 때까지 몇 가지 변경 작업을 수행해야하지만 일반적인 방향의 솔기가 좋을 것입니다. – gamma