2013-10-10 242 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