java - 如何在JavaFX中创建后台服务

标签 java javafx fxml

我已经离开 Java 几年了,几天前又开始重新拿起它。我需要使用 FXML 创建一个 GUI,并进行一些练习,我正在实现一个小型聊天应用程序作为练习。
我想创建一个后台线程,它监听端口并将收到的消息发送到文本区域。据我所知,最好使用“javafx.concurrent”包来完成此操作。

所以我想出了以下内容:

import javafx.concurrent.Service;
import javafx.concurrent.Task;

public class ListenOnPort extends Service<Void> {
    @Override protected Task<Void> createTask() {
        return new Task<Void>() {
            @Override protected Void call() throws Exception {

                updateMessage("Bla!");

                /*
                int max = 50;
                for (int i = 1; i <= max; i++) {                        
                    updateProgress(i, max);
                    updateMessage(String.valueOf(i));

                    Thread.sleep(50);

                }
                */

                return null;
            } //call()
        };
    } //createTask()
}// ListenOnPort

[缩写] Controller 是:

public class FXMLDocumentController {
    @FXML private Label         status;
    @FXML private ProgressBar   progressBar;

    ListenOnPort                listenService;

    @FXML void startListening(ActionEvent event) {
        localPort = Integer.parseInt(listenPort.getText());

        status.setText("Attempting to open local port " +localPort +" for listening.");

        listenService.start();
    }

    @FXML void initialize() {
        // assertions

        listenService = new ListenOnPort();
/*>>>*/ progressBar.progressProperty().bind(listenService.progressProperty());
        status.textProperty().bind(listenService.messageProperty());
    }
}

结果是:

java.lang.NullPointerException
at p2pchat.FXMLDocumentController.initialize(FXMLDocumentController.java:130)

第 130 行是倒数第二行代码,用“/>>>/”标记。
为什么我会收到 nullPointerException?我做错了什么?

最佳答案

首先,确保您在 .fxml 文件中创建了一个 ProgressBar 元素,其 fx:idprogressBar

然后在 IDE 中单击项目文件夹并按 F5,它将刷新 .fxml,并会看到最新的版本。否则,IDE 将看不到您最近对 .fxml 文件所做的修改,并会导致 NullPointerException

关于java - 如何在JavaFX中创建后台服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19788973/

相关文章:

java - 带有 JSON 列的 CSV

java - 我将如何编写按钮 onclick 事件?

text - 当我尝试在javafx上打印文本时,出现白色窗口并显示nullpointerexception错误

java - 导出 (Eclipse) 可执行 jar 文件中的 UnsatisfiedLinkError

java - 使用没有 FXML 的 JavaFX Controller

java - 如何将sql native 查询结果映射到spring jpa存储库中的DTO?

java - 哪个范围与 vaadin 和 spring 一起使用?

javafx-2 - 在 javafx 的 webview 中搜索并突出显示文本

java - 如何在 FXML 中定义 Stage?

java - 使用自己的 FXML 动态加载新选项卡