2013-05-17 3 views

Antwort

3

Es kann nicht scheint getan werden, da diese Funktion nicht implementiert ist: https://javafx-jira.kenai.com/browse/RT-210

Die Sache ist, dass Sie kann nichts starten, was awt-stack und jfx in derselben VM erfordert. Die Entscheidung - ist eine separate JVM zu verwenden. Starten Sie einfach eine separate VM und akzeptieren Sie Befehle beim Durchsuchen nach Socket.

Das ist ein Weg, ein anderer Weg - ist es, einen anderen Weg des Browseraufrufs von Java zu finden - das ist eine Aufgabe, die nicht spezifisch für javafx-2 ist, sondern für Java überhaupt. - Mai 17 2013 05.09 Beachten Sie, dass FX8 headful AWT zu laufen in der gleichen VM ermöglicht mit FX

Anthony Petrov hat einen Kommentar:

Aber Entwickler hat einen Kommentar hinzugefügt. Also sollte die AWT API funktionieren.

+0

das ist schrecklich: | Vielen Dank. Ich muss Inhalt in die Anwendung laden oder den Benutzer kopieren die URL kopieren lassen? Dies ist ein UX Monster – Advanced

+0

Es gibt WebView in JavaFX =) Sie können Sites direkt in Ihre Anwendung laden. –

+0

ja das ist was ich geschrieben habe. – Advanced

34

Verwenden Sie hostServices.showDocument(location).

Versuchen Sie den folgenden Code in Ihrer Anwendung Startmethode Abdrucken:

getHostServices().showDocument("http://www.yahoo.com"); 
+0

Es hat funktioniert! Danke vielmals. – Advanced

+0

Was ist mit dem Aufruf dieser Methode aus einer anderen Klasse? Ich habe Schaltflächen in verschiedenen 'fxml Controller-Klassen', die den Standard-Browser in einigen Websites öffnen müssen, was kann ich dafür tun :)? – GOXR3PLUS

+0

In den meisten Fällen können Sie einen statischen Accessor zu Ihrer Unterklasse ['Application'] (https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html) hinzufügen, die' getHostServices () '.Wenn Sie keine statische Methode verwenden möchten und möchten, dass Ihre FXML-Controller in mehreren Anwendungen verwendet werden (z. B. sind sie unabhängig von einer Anwendung Bibliotheks-Steuerelemente), müssen Sie die [Anwendungsinstanz an die FXML-Controller übergeben]. (http://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml). – jewelsea

13

jewelsea Antwort Ergänzung, wenn Sie nicht wissen, wie getHostServices() aufrufen, dann versuchen Sie diese auf Ihre Hauptklasse:

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

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

+5

Beachten Sie, dass Klassen wie HostServicesDelegate nicht Teil der öffentlich dokumentierten JavaFX-API sind und möglicherweise nicht in späteren Java-Versionen (z. B. Java 9) verfügbar sind. – jewelsea

7

Eine weitere Option ist ProcessBuilder zu verwenden:

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 ohne Fehler hängt.

1

Hier ist ein Skript, das in der Szene-Controller arbeitet, wenn eine Taste aktiviert wird:

Diese
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

Versuchen:

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