web-dev-qa-db-fra.com

Comment puis-je ouvrir le navigateur 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 trouvé aucune documentation officielle à ce sujet. Un indice?

EDIT: J'ai trouvé un tutoriel mais cela ne fonctionne pas . J'utilise MacOsX et j'ai essayé de le lancer. 

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

mais je reçois un HeadlessExcelption

25
Advanced

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

Complétant la réponse de jewelsea, si vous ne savez pas comment appeler getHostServices (), essayez ceci dans 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
ceklock

Une autre option consiste à 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 erreur.

8
Eldelshell

Essaye ça:

try {
    Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}
3
Aupr

Cela semble impossible, semble-t-il, car cette fonctionnalité n'est pas implémentée: https://javafx-jira.kenai.com/browse/RT-210

Le fait est que vous ne pourrez rien lancer, ce qui nécessite awt-stack et jfx dans la même machine virtuelle. La décision - consiste à utiliser une machine virtuelle Java distincte. Il suffit de lancer une machine virtuelle distincte et d’accepter les commandes de navigation par socket. 

C’est un moyen, un autre moyen - de rechercher un autre moyen d’appel au navigateur depuis Java - il s’agit d’une tâche qui n’est pas spécifique à javafx-2, mais à Java du tout.

Mais le développeur a ajouté un commentaire: 

Anthony Petrov a ajouté un commentaire - 17 mai 2013 17h09 Notez que FX8 permet à AWT très intelligent de s'exécuter dans le même VM avec FX. Donc, l'API AWT devrait fonctionner.

2
Alexander Kirov

Voici un script qui fonctionne dans le contrôleur de scène, lorsqu'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
rainer