Search code examples
javajavafx-8external-application

Open External Application From JavaFX


I found a way to open a link on default browser using HostServices.

getHostServices().showDocument("http://www.google.com");
  • Is there any way to open a media in default media player?
  • Is there any way to launch a specific File or Application?

Solution

  • If you want to either open a URL which has an http: scheme in the browser, or open a file using the default application for that file type, the HostServices.showDocument(...) method you referenced provides a "pure JavaFX" way to do this. Note that you can't use this (as far as I can tell) to download a file from a web server and open it with the default application.

    To open a file with the default application, you must convert the file to the string representation of the file: URL. Here is a simple example:

    import java.io.File;
    
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.VBox;
    import javafx.stage.FileChooser;
    import javafx.stage.Stage;
    
    public class OpenResourceNatively extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            TextField textField = new TextField("http://stackoverflow.com/questions/39898704");
            Button openURLButton = new Button("Open URL");
            EventHandler<ActionEvent> handler = e -> open(textField.getText());
            textField.setOnAction(handler);
            openURLButton.setOnAction(handler);
    
            FileChooser fileChooser = new FileChooser();
            Button openFileButton = new Button("Open File...");
            openFileButton.setOnAction(e -> {
                File file = fileChooser.showOpenDialog(primaryStage);
                if (file != null) {
                    open(file.toURI().toString());
                }
            });
    
            VBox root = new VBox(5, 
                    new HBox(new Label("URL:"), textField, openURLButton),
                    new HBox(openFileButton)
            );
    
            root.setPadding(new Insets(20));
            primaryStage.setScene(new Scene(root));
            primaryStage.show();
        }
    
        private void open(String resource) {
            getHostServices().showDocument(resource);
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }