JavaFX2:Webview:页面显示空屏幕

JavaFX2:Webview:页面显示空屏幕,webview,proxy,javafx-2,Webview,Proxy,Javafx 2,我尝试使用webview在javafx视图上显示google网页。它所做的只是显示一个空页面。为了测试,我在底部添加了一个文本元素,它确实出现了。任何指示都会有帮助。附上我的代码和示例屏幕 我在Windows7机器上运行此应用程序,该机器具有8GB RAM,并且部署在需要代理身份验证的环境中 import java.net.Proxy; import java.net.ProxySelector; import java.net.URI; import java.net.URISyntaxExc

我尝试使用webview在javafx视图上显示google网页。它所做的只是显示一个空页面。为了测试,我在底部添加了一个文本元素,它确实出现了。任何指示都会有帮助。附上我的代码和示例屏幕

我在Windows7机器上运行此应用程序,该机器具有8GB RAM,并且部署在需要代理身份验证的环境中

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();
}
}
导入java.net.Proxy;
导入java.net.ProxySelector;
导入java.net.URI;
导入java.net.URISyntaxException;
导入java.util.List;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.PasswordField;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.Pane;
导入javafx.scene.layout.VBox;
导入javafx.scene.text.text;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
公共类MyBrowser扩展了应用程序
{
私有窗格根;
@凌驾
public void start(最终阶段)抛出URISyntaxException
{
root=新的VBox();
List proxies=ProxySelector.getDefault().select(新URI(“http://www.google.com"));
final Proxy Proxy=proxies.get(0);//忽略多个代理以简化代码段
if(proxy.type()!=proxy.type.DIRECT)
{
//您可以使用单独的阶段将其更改为对话框
最终文本字段登录=新文本字段(“登录”);
final PasswordField pwd=新密码字段();
按钮btn=新按钮(“登录”);
btn.setOnAction(新的EventHandler()
{
公共无效句柄(ActionEvent t)
{
setProperty(“http.proxyUser”,login.getText());
setProperty(“http.proxyPassword”,pwd.getText());
displayWebView();
}
});
root.getChildren().addAll(登录名、密码、btn);
}
其他的
{
displayWebView();
}
舞台场景(新场景(根,400600));
stage.show();
}
私有void displayWebView()
{
root.getChildren().clear();
WebView WebView=新建WebView();
final-WebEngine-WebEngine=webView.getEngine();
root.getChildren().addAll(webView,新文本(“HELLO”);
webEngine.load(“http://www.google.com");
}
公共静态void main(字符串[]args)
{
发射();
}
}

我复制并粘贴了您的代码,并使用Java7u40和Java8b108在Windows 7上运行

在这两种情况下,代码都正常运行并显示页面

源代码中的代理选择器代码没有为我触发(可能是因为我有一个proxy.Type.DIRECT连接,所以它没有任何作用)


这在没有代理设置的环境中工作。但问题仍然是,这在需要代理身份验证的情况下不起作用。由于您澄清的问题似乎纯粹是关于使用JavaFX设置代理,因此我投票将其作为副本关闭。同意您的看法。结束讨论。我还认为,当javafx应用程序需要代理设置时,会出现一个类似的弹出窗口,此代码不应用于手动要求用户输入代理详细信息。可能重复