Java 执行公共静态方法并捕获返回值,可能吗?

Java 执行公共静态方法并捕获返回值,可能吗?,java,javafx,Java,Javafx,我从ScanSystem()调用静态方法AddTask。在这里我想声明一个字符串变量,这看起来很有效,但是AddTask()中的所有内容都是在完成方法ScanSystem()之后发生的,为什么? 完成AddTask() 扫描系统() AddTask() 您似乎正在FX应用程序线程上执行所有这些操作。该线程负责更新UI,因此在整个ScanSystem()(sic)方法完成之前,不会对UI进行任何实际更改 要解决此问题,您需要在后台线程中执行长时间运行的操作,并使用平台计划对FX应用程序线程上的UI

我从
ScanSystem()
调用静态方法
AddTask
。在这里我想声明一个字符串变量,这看起来很有效,但是
AddTask()
中的所有内容都是在完成方法
ScanSystem()
之后发生的,为什么? 完成
AddTask()

扫描系统() AddTask()
您似乎正在FX应用程序线程上执行所有这些操作。该线程负责更新UI,因此在整个
ScanSystem()
(sic)方法完成之前,不会对UI进行任何实际更改

要解决此问题,您需要在后台线程中执行长时间运行的操作,并使用
平台计划对FX应用程序线程上的UI进行增量更新。runLater(…)


你在扫描系统中得到了一个taskId,对吗?当你说AddTask()发生在ScanSystem之后时,你是说AddTask中创建的任务请使用。是的,我在ScanSystem()中创建longTaskId,并用系统时间填充它。之后,我将FX组件的ID(Label和ProgressIndicator)设置为这个ID,这样我就可以在UpdateTask(taskId,…)中访问它
private void ScanSystem() {
    double startScanTime = System.currentTimeMillis();
    //Preparing Event
    String startupTaskText = "System Scan has started!";
    double startUpProgress = 0;
    String taskID = App.AddTask(startupTaskText, startUpProgress);

    String [][] snapshotArray = manager.getSystemSnapshotsScanSystem(); //Get snapshots from Manager in Array
    tableScanSystemForSnapshots.setItems(getSnapshot(snapshotArray)); //push values to observableList

    double endScanTime = System.currentTimeMillis();
    String updateStartupTaskText = "System Scan finished in "+ ((endScanTime-startScanTime)/1000) + " Seconds";
    startUpProgress = 1;
    UpdateTask(taskID, updateStartupTaskText, startUpProgress);}
public static String AddTask(String taskText, Double progress) {
    //TODO: do Add Task Logic here
    long longTaskId = System.currentTimeMillis(); //Define TaskID
    String taskId = ""+longTaskId;

    Label lblTaskEntry = new Label();
    lblTaskEntry.setText(taskText);
    lblTaskEntry.getStyleClass().add("TaskEntryLabel");
    lblTaskEntry.setId(taskId + "Label");

    Separator separatorTasks = new Separator();
    separatorTasks.setPrefWidth(230);

    ProgressIndicator piTaskEntry = new ProgressIndicator();
    piTaskEntry.getStyleClass().add("TaskEntryProgressIndicator");
    piTaskEntry.setId(taskId + "ProgressIndicator");
    if (progress != 0){
        piTaskEntry.setProgress(progress);
        piTaskEntry.setMaxSize(55, 55); // set maxsize of Progress Indicator if he has progress > 0 and Determinate
    }else {
        piTaskEntry.setMaxSize(35,35);//set maxsize for Progress Indicator if he has state of Indeterminate
    }

    HBox hBoxProgressPaneInnerTaskEntry = new HBox();
    hBoxProgressPaneInnerTaskEntry.setAlignment(Pos.CENTER_LEFT);
    hBoxProgressPaneInnerTaskEntry.setId(taskId + "Hbox");
    hBoxProgressPaneInnerTaskEntry.getChildren().addAll(piTaskEntry, lblTaskEntry);
    vBoxProgressPaneInner.getChildren().add(0, separatorTasks);
    vBoxProgressPaneInner.getChildren().add(1, hBoxProgressPaneInnerTaskEntry);
    return taskId;
}
private void scanSystem() {
    new Thread(() -> {
        double startScanTime = System.currentTimeMillis();
        //Preparing Event
        String startupTaskText = "System Scan has started!";
        double startUpProgress = 0;
        String taskID = App.addTask(startupTaskText, startUpProgress);

        String [][] snapshotArray = manager.getSystemSnapshotsScanSystem(); //Get snapshots from Manager in Array
        tableScanSystemForSnapshots.setItems(getSnapshot(snapshotArray)); //push values to observableList

        double endScanTime = System.currentTimeMillis();
        String updateStartupTaskText = "System Scan finished in "+ ((endScanTime-startScanTime)/1000) + " Seconds";
        startUpProgress = 1;
        updateTask(taskID, updateStartupTaskText, startUpProgress);
    }).start();

}
public static String addTask(String taskText, Double progress) {
    //TODO: do Add Task Logic here
    long longTaskId = System.currentTimeMillis(); //Define TaskID
    String taskId = ""+longTaskId;

    Platform.runLater(() -> {

        Label lblTaskEntry = new Label();
        lblTaskEntry.setText(taskText);
        lblTaskEntry.getStyleClass().add("TaskEntryLabel");
        lblTaskEntry.setId(taskId + "Label");

        Separator separatorTasks = new Separator();
        separatorTasks.setPrefWidth(230);

        ProgressIndicator piTaskEntry = new ProgressIndicator();
        piTaskEntry.getStyleClass().add("TaskEntryProgressIndicator");
        piTaskEntry.setId(taskId + "ProgressIndicator");
        if (progress != 0){
            piTaskEntry.setProgress(progress);
            piTaskEntry.setMaxSize(55, 55); // set maxsize of Progress Indicator if he has progress > 0 and Determinate
        }else {
            piTaskEntry.setMaxSize(35,35);//set maxsize for Progress Indicator if he has state of Indeterminate
        }

        HBox hBoxProgressPaneInnerTaskEntry = new HBox();
        hBoxProgressPaneInnerTaskEntry.setAlignment(Pos.CENTER_LEFT);
        hBoxProgressPaneInnerTaskEntry.setId(taskId + "Hbox");
        hBoxProgressPaneInnerTaskEntry.getChildren().addAll(piTaskEntry, lblTaskEntry);
        vBoxProgressPaneInner.getChildren().add(0, separatorTasks);
        vBoxProgressPaneInner.getChildren().add(1, hBoxProgressPaneInnerTaskEntry);
    });

    return taskId;
}