it-swarm.com.de

Wie kann ich den Standard-Systembrowser von einer Java-FX-Anwendung aus öffnen?

Ich versuche, eine Web-URL im Standard-Systembrowser von Javafx zu öffnen. Ich habe keine offizielle Dokumentation dazu gefunden. Irgendeine Ahnung?

EDIT: Ich habe ein Tutorial gefunden, aber es funktioniert nicht . Ich verwende MacOsX und habe versucht, es zu starten 

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

aber ich bekomme eine HeadlessExcelption

25
Advanced

Verwenden Sie hostServices.showDocument (location) .

Versuchen Sie, den folgenden Code in die Startmethode Ihrer Anwendung einzufügen:

getHostServices().showDocument("http://www.yahoo.com");
41
jewelsea

Wenn Sie nicht wissen, wie man getHostServices () anruft, dann versuchen Sie dies in Ihrer Hauptklasse:

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

Eine andere Option ist die Verwendung von ProcessBuilder:

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

Sie können diese Option verwenden, wenn Desktop.getDesktop().browse(uri) aus irgendeinem Grund fehlerfrei hängt.

8
Eldelshell

Versuche dies:

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

Es scheint nicht möglich zu sein, da diese Funktion nicht implementiert ist: https://javafx-jira.kenai.com/browse/RT-210

Die Angelegenheit ist, dass Sie nichts starten können, was awt-stack und jfx in derselben VM erfordert. Die Entscheidung - ist die Verwendung einer separaten JVM. Starten Sie einfach eine separate VM und akzeptieren Sie die Befehle zum Browsen nach Socket. 

Das ist ein Weg, ein anderer Weg - ist es, einen anderen Weg des Browseraufrufs von Java zu finden - dies ist eine Aufgabe, die nicht spezifisch für Javafx-2, sondern für Java ist.

Der Entwickler hat jedoch einen Kommentar hinzugefügt: 

Anthony Petrov hat einen Kommentar abgegeben - 17. Mai 2013 um 17:09 Uhr Beachten Sie, dass mit FX8 der headful AWT im selben VM mit FX laufen kann. Die AWT-API sollte also funktionieren.

2
Alexander Kirov

Hier ist ein Skript, das im Szenencontroller funktioniert, wenn eine Schaltfläche aktiviert ist: 

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