2017-02-17 16 views
0

я пытаюсь использовать WebView в моей Java проекта, на мой код:JavaFX WebView в Java Project

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/"); 

но это thown генерируется исключение

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

И да, это не приложение JavaFx.

+0

, если это не приложение JavaFX, почему вы используете его? – mre

+0

Мне нравится загружать сайт (html5 и css support) в моем приложении :) JEditorPane не поддерживает html5 :( – iwakun

ответ

1

Вы можете вставлять содержимое JavaFX в приложение Swing, используя JFXPanel. Обратите внимание, что для правильной работы вы должны быть осторожны, чтобы создавать и получать доступ к содержимому Swing в потоке отправки событий AWT, а также создавать и получать доступ к содержимому JavaFX в потоке приложения FX, поэтому вам необходимо тщательно управлять кодом, используя SwingUtilities.invokeLater(...) и Platform.runLater(...). (Более подробную информацию см. В разделе documentation.)

Создание JFXPanel запускает набор инструментов FX Application, если он еще не запущен.

Вот простой пример встраивания JavaFX WebView в приложение Swing:

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

это волшебный человек !! работает отлично !! спасибо очень! – iwakun