【问题标题】:JavaFX ListView performance issueJavaFX ListView 性能问题
【发布时间】:2016-06-02 07:33:52
【问题描述】:

所以我在 FXML 中定义了一个 ListView

<ListView fx:id="editRecipeList" layoutX="14.0" layoutY="14.0"
       onMouseClicked="#recipeEditListViewOnMouseClicked" prefHeight="406.0"
 prefWidth="242.0" />

以及对应的方法

@FXML
protected void recipeEditListViewOnMouseClicked() {
    System.out.println("method started");
    List<Document> recipesForEditingClick = mongoDatabase.getCollection("recipes")
            .find(eq("name", "somethng");

   //etc
}

方法不是很大,但是第一行代码System.out.println()只有在5 SECONDS之后才执行!但是在同一个程序的其他ListView中,ListView没有速度问题吗?怎么会这样?如果需要任何其他信息,请发表评论

【问题讨论】:

  • 你可以创建一个synchronized block 如果足够的话,或者你可以disable listview 并在方法结束时重新启用。
  • 如果方法调用需要任何可观的时间来执行,无论如何你都应该将它移到后台线程,否则在方法执行时 UI 只是没有响应。如果您使用Service,那么您只需检查它是否正在运行,如果是则忽略鼠标单击。或者您可以在开始之前禁用列表视图,然后再次启用它 - 但请注意,如果您不将阻塞调用移动到后台线程,这将无效。
  • 对不起,伙计们,我是新来的,我不知道是否可以,但我稍微改变了问题的主题。我已经想出了editRecipeList.setDisable(true);,在方法完成后我将值更改为false。无论如何,我认为这是一个数据库性能问题,但它是 JavaFX 问题
  • 我有点怀疑。如果您注释掉数据库访问(可能只是创建一些硬编码数据),您还会看到延迟吗?您可能会看到 JVM 重新排序代码执行(如果它不影响最终结果,它可以这样做)或您的环境的工件。如果将数据库调用放入Task 会发生什么?
  • 是的,数据库评论它工作正常。但使用另一种方法,数据库很快。我不知道怎么了-_-

标签: java javafx


【解决方案1】:

如果调用数据库需要相当长的时间,则需要将其放入后台线程。在 JavaFX 中执行此操作的最佳方法是将调用封装在 Task 中。

试试:

@FXML
protected void recipeEditListViewOnMouseClicked() {
    System.out.println("method started");

    editRecipeList.setDisable(true);
    Task<List<Document>> getRecipesTask = new Task<List<Document>>() {
        @Override
        public List<Document> call() throws Exception {
            return mongoDatabase.getCollection("recipes")
                    .find(eq("name", "somethng");
        }
    };

    getRecipesTask.setOnSucceeded(e -> {
        editRecipeList.setDisable(false);
        List<Document> recipesForEditingClick = getRecipesTask.getValue();
        // process results here...

        //etc
    });

    Thread thread = new Thread(getRecipesTask);
    thread.setDaemon(true);
    thread.start();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2019-07-26
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多