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
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");
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);
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.
Essaye ça:
try {
Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
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.
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 {
}
}