5

Mac Java Swingアプリケーションを作成し、「Info.plist」ファイルにファイル拡張子(* .pkkt)を設定したので、そのファイルをダブルクリックするとアプリケーションが開きます。

私がそうするとき、プログラムはうまく動きます。ここで、プログラムに(* .pkkt)プロジェクトをロードする必要がありますが、Windowsオペレーティングシステムで発生するように、ファイルパスがMacのmain(...)メソッドに引数として渡されません。

いくつか検索した後、そのようなクリックされたファイルを処理するためのMRJOpenDocumentHandlerインターフェイスを備えたApple処理jar「 MRJToolkitStubs」を見つけました。メインプログラムクラスにそのインターフェイスを実装することにより、そのファイルをロードするためにそれを使用しようとしましたが、機能していません。実装されたメソッドは、プログラムの起動時に呼び出されることはありません。

このインターフェイスはどのように実行されますか?

- - - - - - - - - - - - - - - - - - - - - - - - - 編集:コードサンプルを追加する

これが私が使用しているコードです:

public static void main( final String[] args ) {         
    .                   
    .         
    .       
        MacOpenHandler macOpenHandler = new MacOpenHandler();        
        String projectFilePath = macOpenHandler.getProjectFilePath();  // Always Empty !!           
    }
class MacOpenHandler implements MRJOpenDocumentHandler {
    private String projectFilePath = ""; 

    public MacOpenHandler () {
        com.apple.mrj.MRJApplicationUtils.registerOpenDocumentHandler(this) ; 
    }

    @Override
    public void handleOpenFile( File projectFile ) { 
        try {
            if( projectFile != null ) {
                projectFilePath = projectFile.getCanonicalPath();
                   System.out.println( projectFilePath );  // Prints the path fine.
            }
        } catch (IOException e) {}  
    }

    public String getProjectFilePath() {
        return projectFilePath;
    }
}

上記のコメントで述べたように、「getProjectFilePath()」は常に空です!

4

2 に答える 2

0

Apple Java Extensionsを使用したいと思うでしょう。

それらは Mac OS X で動作するすべての JDK に含まれているはずですが、ドキュメントを入手するのはちょっと難しいです。詳細については、この回答を参照してください。

具体的には、OpenFilesHandeler.

このコード スニペットは機能するはずです。

import com.apple.eawt.event.OpenFilesHandeler;
import com.apple.eawt.event.AppEvent;
import java.io.File;
import java.util.List;

class MacOpenHandler implements OpenFilesHandeler {

    @Override
    public void openFiles(AppEvent.OpenFilesEvent e)  { 
        List<File> files = e.getFiles();
        // do something
    }

}

そしてどこか:

import com.apple.eawt.Application;

...

MacOpenHandeler myOpenHandeler = new MacOpenHandeler();
Application.getApplication().setOpenFileHandler(myOpenHandeler);
于 2014-10-14T05:10:53.830 に答える