Ho finalmente trovato un modo per risolvere questo.
Per rispondere a questa ho creato un'applicazione di esempio che è composto da tre classi:
Launcher
MyApp
Handler_OpenFile
MyApp è la classe estende la classe javafx.application.Application, il Handler_OpenFile viene utilizzato per gestire l'evento doppio clic e infine il Launcher è quello contenente il main.
Launcher.java: questa classe DEVE esistere perché se il main è stato definito all'interno della classe che estende javafx.application.Application OpenFilesEvent non funzionerà correttamente (più precisamente OpenFilesEvent verrà generato solo se l'applicazione era già ha aperto).
public class Launcher {
public static void main(String[] args) {
if (System.getProperty("os.name").contains("OS X")){
com.apple.eawt.Application a = com.apple.eawt.Application.getApplication();
Handler_OpenFile h_open = new Handler_OpenFile();
a.setOpenFileHandler(h_open);
Application.launch(Main.class, args);
}
}
}
Handler_OpenFile.java: questa classe definisce una variabile statica che memorizza il valore del file che ha aperto l'applicazione. Questa non è probabilmente la soluzione migliore, ma è l'unico modo per farlo funzionare per ora.
public class Handler_OpenFile implements OpenFilesHandler {
public static File file = null;
@Override
public void openFiles(OpenFilesEvent e) {
for (File file : e.getFiles()){
this.file = file;
}
}
}
MyApp.java: questa classe sarà in grado di accedere al valore statico assegnato nella classe Handler_OpenFile e recuperare percorso assoluto del file di apertura.
public class MyApp extends Application {
@Override
public void start(Stage primaryStage) {
Logger logger = Logger.getLogger("log");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler("../Logfile.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info("Application launched from: " + Handler_OpenFile.file.getAbsolutePath());
} catch (SecurityException | IOException exception) {
exception.printStackTrace();
}
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
}
finalmente nel file build.xml che crea il tuo pacchetto si dovrà aggiungere l'associazione di file (in questo esempio con i file con estensione .zzz):
<fx:info title="Sample" vendor="me">
<fx:association extension="zzz" description="Sample Source"/>
</fx:info>
questo funziona solo con l'ultimo aggiornamento di Java (8u40): documentation at this link. Per le versioni precedenti dovrai modificare manualmente info.plist all'interno del tuo pacchetto come si dice nello Apple Java Extensions documentation.
Cosa significa 'getParameters(). GetRaw()' restituisce? –
Scusa se stavo effettivamente usando quello, modifico la mia domanda – u09