我的控制器类中有一个小的日志屏幕(TextFlow)。我想将其他类的所有日志打印到此文本流。我做了以下,
MYAppController
@FXML
public TextFlow txtlog;
// Implement
public synchronized void setLog(String type, String log) {
Platform.runLater(() -> {
Text text = new Text();
switch (type) {
case "error":
text.setStyle("-fx-fill: #F5784E;-fx-font-weight:bold;");
break;
case "success":
text.setStyle("-fx-fill: #4F8A10;-fx-font-weight:bold;");
break;
case "warning":
text.setStyle("-fx-fill: #9F6000;-fx-font-weight:bold;");
break;
case "info":
text.setStyle("-fx-fill: #488ed4;-fx-font-weight:bold;");
break;
default:
text.setStyle("-fx-fill: #FFFFFF;-fx-font-weight:bold;");
break;
}
text.setText(">> " + log + "\n");
txtLog.getChildren().add(text);
});
}
我可以从MyController轻松调用setLog("info", "Hello this is info!!")
。
我想打印另一个类的日志格式,
eg. ExampleClass.java
public MyAppController app = new MyAppController();
app.setLog("info", "Extracting : " + currentEntry);
我收到以下错误Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
更多的是,使用Task
来调用ExampleClass,
Task<Void> task1 = new Task<Void>() {
@Override
public Void call() {
new Thread(new ExampleClass(param1, param2)).run();
return null;
}
};
我该如何使这项工作?即如何在另一个类(在新线程上或在同一个运行线程中)的Controller类中使用setLog方法?