Java Swing - Wie kann ich auf einem Mac auf eine Projektdatei doppelklicken, um meine Anwendung zu öffnen und die Datei zu laden?

Ich habe eine Mac Java Swing-Anwendung erstellt und in der Datei "Info.plist" eine Dateierweiterung (* .pkkt) festgelegt. Wenn Sie also auf diese Datei doppelklicken, wird meine Anwendung geöffnet.

Wenn ich das tue, läuft das Programm gut. Jetzt muss ich das (* .pkkt) -Projekt in das Programm laden, aber der Dateipfad wird nicht als Argument an die Hauptmethode (...) in Mac übergeben, wie dies im Windows-Betriebssystem der Fall ist.

Nach einigem Suchen fand ich ein Apple-Handhabungsglas "MRJToolkitStubs"das hat dieMRJOpenDocumentHandler Schnittstelle, um solche angeklickten Dateien zu behandeln. Ich habe versucht, diese Datei damit zu laden, indem ich das Interface in die Hauptprogrammklasse implementiert habe, aber es funktioniert nicht. Die implementierte Methode wird beim Programmstart nie aufgerufen.

Wie läuft diese Schnittstelle ab?

------------------------------------------------- Bearbeiten : Fügen Sie ein Codebeispiel hinzu

Hier ist der Code, den ich benutze:

<code>public static void main( final String[] args ) {         
    .                   
    .         
    .       
        MacOpenHandler macOpenHandler = new MacOpenHandler();        
        String projectFilePath = macOpenHandler.getProjectFilePath();  // Always Empty !!           
    }
</code>
<code>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;
    }
}
</code>

Wie im obigen Kommentar erwähnt, ist "getProjectFilePath ()" immer leer!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage