2017-02-17 3 views
0

ich versuche, die WebView in meinem Java-Projekt zu verwenden, in meinem Code ist:JavaFx WebView in Java Projekt

JFXPanel fxPanel = new JFXPanel(); 
fxPanel.setBounds(10, 48, 439, 362); 
desktopPane.add(fxPanel); 

WebView webView = new WebView(); 
fxPanel.setScene(new Scene(webView)); 
webView.getEngine().load("http://www.stackoverflow.com/"); 

aber das diese eine Ausnahme thown

java.lang.IllegalStateException: Not on FX application thread; currentThread = main 

Und ja, das ist nicht eine JavaFx-Anwendung.

+0

wenn dies keine Anwendung JavaFX ist, warum Sie es verwenden? – mre

+0

Ich möchte eine Website (HTML5 und CSS-Unterstützung) in meiner Anwendung laden :) JEditorPane unterstützen HTML5 :( – iwakun

Antwort

1

Sie können JavaFX-Inhalt mit JFXPanel in eine Swing-Anwendung einbetten. Beachten Sie, dass Sie sorgfältig darauf achten müssen, den Swing-Inhalt im AWT-Ereignisversandthread zu erstellen und darauf zuzugreifen und den JavaFX-Inhalt im FX-Anwendungs-Thread zu erstellen und darauf zuzugreifen. Daher müssen Sie den Code unter Verwendung von SwingUtilities.invokeLater(...) sorgfältig verwalten und Platform.runLater(...). (Weitere Informationen finden Sie unter documentation.)

Durch Erstellen einer JFXPanel wird das FX-Anwendungs-Toolkit gestartet, sofern es nicht bereits gestartet wurde.

Hier ist ein einfaches Beispiel für eine JavaFX WebView in eine Swing-Anwendung einbetten:

import java.awt.BorderLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Scene; 
import javafx.scene.web.WebView; 

public class FXWebViewInSwing { 

    private JFXPanel jfxPanel ; 

    public void createAndShowWindow() { 
     JFrame frame = new JFrame(); 
     JButton quit = new JButton("Quit"); 
     quit.addActionListener(event -> System.exit(0)); 
     jfxPanel = new JFXPanel(); 
     Platform.runLater(this::createJFXContent); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(quit); 

     frame.add(BorderLayout.CENTER, jfxPanel); 
     frame.add(BorderLayout.SOUTH, buttonPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(800, 800); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private void createJFXContent() { 
     WebView webView = new WebView(); 
     webView.getEngine().load("http://stackoverflow.com/questions/42297864/javafx-webview-in-java-project"); 
     Scene scene = new Scene(webView); 
     jfxPanel.setScene(scene); 
    } 

    public static void main(String[] args) { 
     FXWebViewInSwing swingApp = new FXWebViewInSwing(); 
     SwingUtilities.invokeLater(swingApp::createAndShowWindow); 
    } 
} 

enter image description here

+0

das ist magischer Mann !! funktioniert perfekt !! Vielen Dank !!! – iwakun