Как сохранить объекты JavaFX в файл и загрузить их обратно [duplicate]

Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.

Вот пример того же:

var async = require("async");

// This wires up result back to the caller
var result = {};
var asyncTasks = [];
asyncTasks.push(function(_callback){
    // some asynchronous operation
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;
            _callback();
        }
    });
});

async.parallel(asyncTasks, function(){
    // result is available after performing asynchronous operation
    console.log(result)
    console.log('Done');
});

Я использую объект result для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.

Я использую этот подход много. Мне было бы интересно узнать, насколько хорошо этот подход работает, когда задействован результат обратно через последовательные модули.

3
задан Reshi 14 June 2012 в 14:18
поделиться

2 ответа

Если главная цель сохранения пользовательских компонентов на стороне серверов - это иметь возможность показывать один и тот же интерфейс пользователю - почему бы не сохранить всю описательную информацию, необходимую вам о компонентах пользователей, и когда это необходимо - просто снова перестроить пользовательский интерфейс, используя хранимую описательную информацию? Вот пример:

/* That is the class for storing information, which you need from your components*/
 public class DropedComponentsCoordinates implements Serializable{
private String componentID;
private String x_coord;
private String y_coord;
//and so on, whatever you need to get from yor serializable objects;
//getters and setters are assumed but not typed here.
 }

 /* I assume a variant with using FXML. If you don't - the main idea does not change*/
 public class YourController implements Initializable {

List<DropedComponentsCoordinates> dropedComponentsCoordinates;

@Override
public void initialize(URL url, ResourceBundle rb) {
    dropedComponentsCoordinates = new ArrayList();
}

//This function will be fired, every time 
//a user has dropped a component on the place he/she wants
public void OnDropFired(ActionEvent event) {
    try {
        //getting the info we need from components
        String componentID = getComponentID(event);
        String component_xCoord = getComponent_xCoord(event);
        String component_yCoord = getComponent_yCoord(event);

        //putting this info to the list
        DropedComponentsCoordinates dcc = new DropedComponentsCoordinates();
        dcc.setX_Coord(component_xCoord);
        dcc.setY_Coord(component_yCoord);
        dcc.setComponentID(componentID);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getComponentID(ActionEvent event){
    String componentID;
    /*getting cpmponentID*/
    return componentID;
}
private String getComponent_xCoord(ActionEvent event){
    String component_xCoord;
    /*getting component_xCoord*/
    return component_xCoord;
}
private String getComponent_yCoord(ActionEvent event){
    String component_yCoord;
    /*getting component_yCoord*/
    return component_yCoord;
}
}
3
ответ дан Benjamin 5 September 2018 в 09:21
поделиться

Вы правы, JavaFX (по состоянию на 2.1) не поддерживает сериализацию компонентов с использованием интерфейса Java Serializable - поэтому вы не можете использовать этот механизм.

JavaFX может десериализоваться из FXML-документ, использующий метод FXMLLoader.load () .

Трюк заключается в том, как записать ваши существующие компоненты и состояния в FXML?

Существует обсуждение форума о сериализации в FXML.

В настоящее время на платформе, которая выполняет сериализацию FXML, нет ничего публичного. По-видимому, создание родового сценария => сериализатор FXML - довольно сложная задача (и для этого я не знаю публичного стороннего API). Было бы не слишком сложно перебирать сценарий и записывать FXML для ограниченного набора компонентов и атрибутов.

4
ответ дан jewelsea 5 September 2018 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: