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