如何在JavaFX中创建后台服务

时间:2013-11-05 12:25:44

标签: java javafx fxml

我已经离开Java几年了,并且几天前又开始重新学习它。我需要使用FXML创建一个GUI并进行一些练习我正在实施一个小聊天应用程序作为练习 我想创建一个后台线程,它监听端口并将收到的消息发送到textArea。根据我的阅读,最好使用'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

[缩短]控制器是:

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行是第二行到最后一行代码,标有“/ &gt;&gt;&gt;&gt; /'。 为什么我会得到nullPointerException?我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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