当前位置: 首页 > 知识库问答 >
问题:

JavaFX WebView不会加载localhost网站

董花蜂
2023-03-14

我试图在JavaFX网络视图中加载一个本地主机网站,但它似乎不起作用。在加载网页之前,我正在应用程序中创建HttpServer,但它只显示一个空白屏幕。导航到http://localhost:8080/index.html在谷歌Chrome中,我猜这一定是网络视图加载的问题。加载其他非本地主机页面确实有效,但我无法找出本地主机页面出现问题的原因。

下面的代码首先使用本地html文件创建HttpServer,然后继续创建JavaFX阶段并将localhost站点加载到WebView中,只显示一个空白页面。

public class Main extends Application {

    static String path = "";
    static HashMap<String, String> pages = new HashMap();

    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        createPage(server, "/index.html", "index.html");
        server.setExecutor(null);
        server.start();

        launch(args);
    }

    public void start(Stage stage) throws Exception {
        try {
            WebView webview = new WebView();
            webview.getEngine().load(
                    "http://127.0.0.1:8080/index.html"
            );
            webview.setPrefSize(640, 390);

            stage.setScene(new Scene(webview));
            stage.show();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            try {
                String response = readFile(pages.get(t.getHttpContext().getPath()), Charset.defaultCharset());
                t.sendResponseHeaders(200, response.length());
                OutputStream os = t.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    static void createPage(HttpServer server, String context, String path){
        pages.put(context, path);
        server.createContext(context, new MyHandler());
    }

    static String readFile(String path, Charset encoding)
            throws IOException
    {
        byte[] encoded = Files.readAllBytes(Paths.get(path));
        return new String(encoded, encoding);
    }

}

非常感谢您为解决此问题提供的任何帮助。谢谢

共有1个答案

鲁杜吟
2023-03-14

更改t.send响应标题(200,response.length());t.send响应标题(200,0);似乎为我解决了这个问题。

 类似资料:
  • 我正在尝试从C#提交一个带有Selenium的登录表单。但是我不能让它在提交后等待新页面加载。唯一有效的是Thread.Sleep.我应该怎么做才能让它等待?

  • 我正在尝试在localhost中构建WordPress主题。我有我的functions.php当我打开浏览器(http://localhost/website/wordpress)时,它并没有加载所有的css更改。浏览器中只显示车身背景。你觉得问题出在哪里?感谢你的帮助。

  • 问题内容: 我正在使用来在主机(debian i386)上编译一个简单的C文件。 然后将文件复制到目标(arm,uclibc)计算机。 运行-没关系。 它说,使用GDB(目标)并列出源代码。事实一直如此吗? 如果我将文件复制到目标,则命令它列出源代码。 我的问题: GDB一直都是这样,还是我可以控制其他选项? 您对调试程序有什么建议吗? 一些信息可能会有用: 源代码1.c文件 : 交叉编译版本(主

  • 问题内容: 我正在构建一个小型React应用,并且我的本地图像无法加载。图像像负载。我以为这可能与服务器有关? 这是我的App.js index.js: 和server.js: 问题答案: 使用Webpack时,您需要对图像进行处理,以便Webpack处理它们,这可以解释为什么外部图像不加载而内部图像加载的原因,因此,您无需为每个图像使用正确的图像名称替换image-name.png。这样,Web

  • 问题内容: 我正在尝试进行变量替换,同时也使它可以通过ngClick单击。 我做了一个小矮人演示(单击按钮,观察输入框保持不变) 标记: 角度的东西: 问题是:为什么单击按钮时不触发。应该在输入字段中设置值’foobar’。 问题答案: 同时,有一个针对该问题的官方解决方案: 无需编写自定义指令即可进行编译。 有关更多信息:https : //github.com/angular-translat

  • 我昨天刚从Windows7升级到Windows10。 我已经在我的计算机上重新安装了XAMPP,我有一个问题是,当单击MySQL管理按钮时,它会将我指向localhost/phpmyadmin页面,但该页面无法加载。