我已经离开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?我做错了什么?
答案 0 :(得分:2)
首先,请确保您在.fxml文件中创建了一个ProgressBar
元素,fx:id
为progressBar
。
然后在IDE中单击项目文件夹并按F5
,它将刷新.fxml,它将看到最新版本。否则IDE将不会看到您对.fxml文件所做的最近修改,并将导致NullPointerException
。