我已经离开 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 行是倒数第二行代码,用'/ >>> /' 标记。
为什么我会收到 nullPointerException?我究竟做错了什么?