Comment puis-je ouvrir le navigateur de système par défaut à partir d'une application java fx?

j'essaie d'ouvrir une url web dans le navigateur système par défaut de javafx. Je n'ai pas trouvé la documentation officielle concernant cette. Aucun indice?

modifier: J'ai trouvé un tutoriel mais ça ne fonctionne pas. J'utilise MacOsX et j'ai essayé de lancer

java.awt.Desktop.getDesktop().browse(new URI(url));

mais je reçois un HeadlessExcelption

25
demandé sur fabian 2013-05-17 12:08:16

6 réponses

Utiliser hostServices.showDocument(emplacement).

essayez de placer le code suivant dans la méthode de démarrage de votre application:

getHostServices().showDocument("http://www.yahoo.com");
41
répondu jewelsea 2013-05-17 18:09:40

en complément de la réponse de jewelsea, si vous ne savez pas comment appeler getHostServices() alors essayez ceci à votre classe principale:

HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);

http://docs.oracle.com/javafx/2/api/javafx/application/HostServices.html#showDocument(java.lang.String)

14
répondu ceklock 2016-03-16 00:10:08

une Autre option est d'utiliser ProcessBuilder:

public static void openWebpage(String url) {
    try {
        new ProcessBuilder("x-www-browser", url).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Vous pouvez utiliser cette option si Desktop.getDesktop().browse(uri) pour une raison quelconque se bloque sans aucune erreur.

7
répondu Eldelshell 2014-08-23 08:47:31

Il ne peut pas être fait, semble, car cette fonctionnalité n'est pas implémentée : https://javafx-jira.kenai.com/browse/RT-210

le problème est que vous ne serez pas en mesure de lancer quoi que ce soit, ce qui nécessite awt-stack et jfx dans la même VM. La décision est d'utiliser une JVM. Il suffit de lancer une VM séparée, et d'accepter des commandes sur la navigation par socket.

C'est une façon, d'une autre façon est de trouver d'autres moyens de navigateur appel de java - c'est une tâche pas spécifique pour javafx-2, mais à java.

mais developer a ajouté un commentaire:

Anthony Petrov a ajouté un commentaire - May, 17 2013 05: 09 PM Notez que FX8 permet à headful AWT de fonctionner dans la même VM avec FX. Donc L'API AWT devrait fonctionner.

2
répondu Alexander Kirov 2013-05-17 13:15:37

Essaye Ceci:

try {
    Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}
2
répondu Aupr 2017-12-05 03:50:26

voici un script qui fonctionne à l'intérieur du contrôleur de scène, quand un bouton est activé:

package sample;


import com.sun.deploy.uitoolkit.impl.fx.HostServicesFactory;
import com.sun.javafx.application.HostServicesDelegate;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.stage.Stage;

public class Controller extends Application {

    public void openBrowser(ActionEvent actionEvent) throws Exception {

        HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
        getHostServices().showDocument("http://www.yahoo.com");

    }

    @Override
    public void start(Stage primaryStage) throws Exception {

    }
}
0
répondu rainer 2016-12-08 15:06:11