JavaFX访问控制器来自其他类的同步方法

时间:2016-03-11 12:45:16

标签: multithreading javafx

我的控制器类中有一个小的日志屏幕(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方法?

0 个答案:

没有答案