javafx webview js 操作后台方法页面卡住

594井 发布于 2015/01/09 12:13
阅读 1K+
收藏 1
 public Browser(Stage stage) {
        String ProjectPath = System.getProperty("user.dir");
        we.load("file:///" + ProjectPath + "/Resource/Index.html");
        we.getLoadWorker().stateProperty().addListener((ObservableValue<? extends State> observable, State oldValue, State newValue) -> {
            if (newValue == Worker.State.SUCCEEDED) {
                JSObject win = (JSObject) we.executeScript("window");
                win.setMember("app", new MyApp(stage, we)); 
                stage.setTitle(we.getTitle());
            }
        });
        getChildren().add(wv);

    }

这是我浏览器的类,设置了页面访问js方法所存在的类为MyApp里面的方法

 MyApp类里面有两个方法

public String ChoosePath() {
        DirectoryChooser dc = new DirectoryChooser();
        File path = dc.showDialog(primaryStage);
        new Thread() {
            @Override
            public void run() {
                Platform.runLater(() -> {
                    GetAllFile(path);
                });
            }
        }.start();
        return path.toString();
    }

 private synchronized void GetAllFile(File Path) {
        if (Path.isDirectory()) {
            we.executeScript("ShowProgress(false,'" + Path.toURI() + "')");
            for (int i = 0; i < Path.list().length; i++) {
                File path = Path.listFiles()[i];
                new Thread() {
                    @Override
                    public void run() {
                        Platform.runLater(() -> {
                            GetAllFile(path);
                        });
                    }
                }.start();


            }
        } else {
            we.executeScript("ShowProgress(true,'" + Path.toURI() + "')");
        }
    }

我的页面有两个方法是调用这两个方法的

 function ShowProgress(IsFile, FilePath) {
                $("#ProgressContent").append("<p>正在解析" + (IsFile ? "文件:" : "文件夹:") + FilePath + "</p>");
            }
            function ChoosePath(t) {
                $("#ProgressContent").html("");
                t.value = app.ChoosePath();
            }

现在的问题是,我页面调用后台的方法的时候,当后台方法读取较大的文件时,页面会卡住,不能进行任何操作,而且读取文件的在页面上展现数据也不是实时的,求大神帮忙分析分析

加载中
返回顶部
顶部