【问题标题】:JavaFX2: Webview: Page shows empty screenJavaFX2:Webview:页面显示空白屏幕
【发布时间】:2013-10-10 15:01:44
【问题描述】:

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

我在具有 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();
}
}

【问题讨论】:

标签: webview proxy javafx-2


【解决方案1】:

我复制并粘贴了您的代码,并在带有 Java7u40 和 Java8b108 的 Windows 7 上运行它。

在这两种情况下,代码都能正常运行并显示http://www.google.com 页面。

您的源代码中的代理选择器代码没有为我触发(可能是因为我有一个 Proxy.Type.DIRECT 连接,所以没有什么可做的)。

【讨论】:

  • 这适用于没有代理设置的环境。但是,问题仍然存在,这在需要代理身份验证的情况下不起作用。
  • 由于您澄清的问题似乎纯粹是围绕使用 JavaFX 进行代理设置,所以我投票决定将其作为 Autodetect proxy - JavaFX - webview 的副本关闭。
  • 同意你的看法。结束讨论。我还认为当 javafx 应用程序需要代理设置时会出现类似this 的弹出窗口,并且此代码不应用于手动要求用户输入代理详细信息。
猜你喜欢
  • 2020-07-17
  • 2013-08-25
  • 2021-08-10
  • 2014-01-13
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2014-02-12
相关资源
最近更新 更多