2013-10-10 291 views
0

我試圖使用webview在我的javafx視圖上顯示谷歌網頁。它所做的只是顯示一個空白頁面。爲了測試,我在底部添加了一個文本元素,它確實顯示出來了。任何指針都會有幫助。我的代碼和示例屏幕已連接。JavaFX2:Webview:頁面顯示空白屏幕

我在具有8 GB RAM的Windows 7計算機上運行此應用程序,並將其部署在需要代理身份驗證的環境中。

import java.net.Proxy; 
import java.net.ProxySelector; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.List; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.PasswordField; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Text; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class MyBrowser extends Application 
{ 

private Pane root; 

@Override 
public void start(final Stage stage) throws URISyntaxException 
{ 
    root = new VBox(); 

    List<Proxy> proxies = ProxySelector.getDefault().select(new URI("http://www.google.com")); 
    final Proxy proxy = proxies.get(0); // ignoring multiple proxies to simplify code snippet 
    if (proxy.type() != Proxy.Type.DIRECT) 
    { 
     // you can change that to dialog using separate Stage 
     final TextField login = new TextField("login"); 
     final PasswordField pwd = new PasswordField(); 
     Button btn = new Button("Login"); 
     btn.setOnAction(new EventHandler<ActionEvent>() 
     { 
      public void handle(ActionEvent t) 
      { 
       System.setProperty("http.proxyUser", login.getText()); 
       System.setProperty("http.proxyPassword", pwd.getText()); 
       displayWebView(); 
      } 
     }); 
     root.getChildren().addAll(login, pwd, btn); 
    } 
    else 
    { 
     displayWebView(); 
    } 

    stage.setScene(new Scene(root, 400, 600)); 
    stage.show(); 
} 

private void displayWebView() 
{ 
    root.getChildren().clear(); 
    WebView webView = new WebView(); 

    final WebEngine webEngine = webView.getEngine(); 
    root.getChildren().addAll(webView, new Text("HELLO")); 
    webEngine.load("http://www.google.com"); 

} 

public static void main(String[] args) 
{ 
    launch(); 
} 
} 

Empty screen on running the application

+0

的可能重複[自動檢測代理服務器 - JavaFX的 - 網頁視圖(http://stackoverflow.com/questions/15575276/autodetect-proxy-javafx-webview) – jewelsea

回答

0

我複製並粘貼代碼,並與Java7u40都Java8b108運行它在Windows 7上。

在這兩種情況下,代碼正常運行並顯示http://www.google.com頁面。

您的源代理選擇器代碼沒有爲我觸發(可能是因爲我有Proxy.Type.DIRECT連接,所以沒有任何事情要做)。

google

+0

這個工作的環境不具備代理設置。但仍然存在這個問題,即在需要代理驗證的情況下這不起作用。 – Aspirant

+0

由於您澄清的問題似乎純粹是圍繞與JavaFX的代理設置,那麼我已投票將其作爲[Autodetect proxy -JavaFX-webview]的副本關閉它(http://stackoverflow.com/questions/15575276/autodetect-proxy -javafx-web視圖)。 – jewelsea

+0

同意你的意見。結束討論。我也認爲當javafx應用程序需要代理設置時會出現像[this]這樣的彈出窗口(http://www.blogosfera.co.uk/wp-content/plugins/wp-o-matic/cache/784a9d9732_djUpW.jpg)並且不應該使用此代碼手動要求用戶輸入代理詳細信息。 – Aspirant