Java Swing - jak dwukrotnie kliknąć plik projektu na Macu, aby otworzyć moją aplikację i załadować plik?

Stworzyłem aplikację Mac Java Swing i ustawiłem dla niej rozszerzenie pliku (*. Pkkt) w pliku „Info.plist”, więc po dwukrotnym kliknięciu tego pliku otwiera moją aplikację.

Kiedy to zrobię, program działa dobrze. Teraz muszę załadować projekt (* .pkkt) do programu, ale ścieżka do pliku nie jest przekazywana jako argument metody main (...) w systemie Mac, jak to się dzieje w systemie operacyjnym Windows.

Po przeszukaniu znalazłem słoik do obsługi Apple ”MRJToolkitStubs„to maMRJOpenDocumentHandler interfejs do obsługi takich klikniętych plików. Próbowałem go użyć do załadowania tego pliku przez zaimplementowanie tego interfejsu w głównej klasie programu, ale nie działa. Zaimplementowana metoda nigdy nie jest wywoływana podczas uruchamiania programu.

Jak działa ten interfejs?

------------------------------------------------- Edytować : Dodaj próbkę kodu

Oto kod, którego używam:

<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>

Jak wspomniano w komentarzu powyżej „getProjectFilePath ()” jest zawsze pusty!

questionAnswers(2)

yourAnswerToTheQuestion