2016-05-20 5 views
10

Я работаю над приложением JavaFX, которое содержит несколько html, css, JS-файлов, которые отображаются внутренним браузером веб-браузера. Теперь проблема заключается в том, что анимации CSS, которые у нас есть, не получают гладко в браузере webkit, предоставляемом JavaFX, но тот же код в Firefox или хром довольно плавный.JavaFX: Внедрение браузера, отличного от доступного webview, с помощью JavaFX

Кроме того, нет возможности сохранения (в настоящее время используются переменные на Java и связь через JS для сохранения).

Что я ищу, есть какой-либо способ интегрировать некоторый браузер без браузера или некоторые настройки, чтобы сделать анимацию CSS более плавной. Единственное, что я натолкнулся на JxBrowser, но это toooooo дорогостоящий для личного использования.

Код:

public class Main extends Application { 

    private Scene scene; 
    MyBrowser myBrowser; 

    String completeText = ""; 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     primaryStage.setTitle("Frontend"); 
     java.net.CookieManager manager = new java.net.CookieManager(); 
     java.net.CookieHandler.setDefault(manager); 

     myBrowser = new MyBrowser(); 
     scene = new Scene(myBrowser, 1080, 1920); 

     primaryStage.setScene(scene); 
     primaryStage.setFullScreen(true); 
     primaryStage.show(); 

     // @ being the escape character 
     scene.setOnKeyTyped(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event) { 
       String text = event.getCharacter(); 
       if (text.equals("0")) { 
        String tempText = completeText; 
        completeText = ""; 
        processText(tempText); 
       }else { 
        completeText = completeText+text; 
       } 
      } 
     }); 
    } 
} 

MyBrowser:

public class MyBrowser extends Region { 

public MyBrowser() { 
     webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { 
      if (newValue == Worker.State.SUCCEEDED) { 
       JSObject window = (JSObject) webEngine.executeScript("window"); 
       window.setMember("app", this); 
      } 
     }); 




     URL urlHello = getClass().getResource(hellohtml); 

     webEngine.load(urlHello.toExternalForm()); 
     webView.setPrefSize(1080, 1920); 
     webView.setContextMenuEnabled(false); 
     getChildren().add(webView); 
    } 

CSS код, который содержит анимацию:

#ball-container.go #ball{ 
-webkit-animation: rotating-inverse 2s ease-out 0s 1 normal; 
animation: rotating-inverse 2s ease-out 0s 1 normal; 
} 


#ball-container { 
height: 102px; 
width: 102px; 
position: absolute; 
top: -95px; 
left: 480px; 
-webkit-transition: all 0.9s ease-in-out 0s; 
transition: all 0.9s ease-in-out 0s; 
} 



#ball-container.shake .ball-wrapper{ 
-webkit-animation: yAxis 0.9s ease-in-out; 
animation: yAxis 0.9s ease-in-out; 
} 

Спасибо.

+0

в код, который вы предоставили, не компилируется. Также отсутствует HTML-код. –

+0

@OJKrylow: этот код только для справки, один из анимации у нас есть. Вы можете попробовать любую анимацию CSS из сети (мы сделали это уже), а производительность плохая. –

+0

Я тестировал WebView с https://daneden.github.io/animate.css/ в режиме 64 бит и 32 бит. Нет анимации с анимацией. Помимо некоторых элементов, которые не отображаются правильно, анимация кажется прекрасной. –

ответ

1

Попробуйте использовать Java 8u112, основанный в коде я создал рабочую выборку (протестировано с использованием Java JDK 8u112 64bit):

import javafx.application.Application; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class Example extends Application 
{ 
    public static void main(String[] args) 
    { 
     launch(args); 
    } 

    class MyBrowser extends Parent 
    { 
     private WebEngine webEngine; 
     private WebView webView; 

     public MyBrowser() 
     { 
      webView = new WebView(); 
      webEngine = webView.getEngine(); 

      // Ugly (but easy to share) HTML content 
      String pageContents = 
        "<html>" 
         + "<head>" 
          + "<style>" 
           + "@-webkit-keyframes mymove {" 
            + "from {top: 0px;}" 
            + "to {top: 50px;}" 
           + "}" 
           + ".box { " 
            + "width: 150px; " 
            + "position: relative; " 
            + "height: 150px; " 
            + "background: red; " 
            + "margin-top: 35px; " 
            + "margin-left: auto; " 
            + "margin-right: auto; " 
            + "-webkit-transition: background-color 2s ease-out; " 
            + "-webkit-transition: all 1s ease-in-out; " 
           + "}" 
           +".box:hover {" 
            +" background-color: green;" 
            + "width:350px;" 
            + "-webkit-animation: mymove 1s infinite;" 
           +"}"   
          + "</style>" 
         + "</head>" 
         + "<body>" 
          + "<div class='box'></div>" 
         + "</body>" 
        + "</html>"; 

      webEngine.loadContent(pageContents); 
      webView.setContextMenuEnabled(false); 
      getChildren().add(webView); 
     } 
    } 

    private Scene scene; 
    MyBrowser  myBrowser; 

    @Override 
    public void start(Stage primaryStage) throws Exception 
    { 
     primaryStage.setTitle("Frontend"); 
     myBrowser = new MyBrowser(); 
     scene = new Scene(myBrowser); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

Я подозреваю, что это потому, что они в настоящее время используют более новый WebKit JDK-8156698, но это может иметь была ошибка, прежде чем (вы можете посмотреть на 8u112 bug fixes списке.

+0

Попробуй это и сообщите. Спасибо. :-) –

0

я была такая же проблема рендеринга угловую на основе веб-приложения с использованием webview.and фиксированной его обновления версии Java для 1.8.0_121.

 Смежные вопросы

  • Нет связанных вопросов^_^