2015-07-15 3 views
0

Я хочу связать Biderectional() DatePicker. Вот что я сделалBinding DatePicker

@FXMLController("title.fxml") 
public class Controller { 
@FXML 
private DatePicker dp_date_from; 
@Inject 
private Model model; 
... 
@PostConstruct 
public void init(){ 
... 
dp_date_from.valueProperty().bindBidirectional(model.dateFromProperty()); 
... 
} 

Модель Класс

@FlowScoped 
public class Model { 
private ObjectProperty<LocalDate> dateFrom; 

public ObjectProperty<LocalDate> dateFromProperty() { 
     return dateFrom; 
    } 
... 
} 

Он выдает ошибку:

io.datafx.controller.FxmlLoaderException:java.lang.reflect.InvocationTargetException 

Что может быть причиной этого?

Ошибка, вызывается в самом приложении, она ничего не пишет в консоли. Я debegged код, и когда дело доходит до линии dp_date_from.valueProperty... он идет здесь бросать исключение:

public <T> ViewContext<T> createByController(Class<T> controllerClass, String fxmlName, ViewConfiguration viewConfiguration, Object... viewContextResources) throws FxmlLoadException { 
try { 
    Object e = controllerClass.newInstance(); 
    ViewMetadata metadata = new ViewMetadata(); 
    FXMLController controllerAnnotation = (FXMLController)controllerClass.getAnnotation(FXMLController.class); 
    if(controllerAnnotation != null && !controllerAnnotation.title().isEmpty()) { 
     metadata.setTitle(controllerAnnotation.title()); 
    } 

    if(controllerAnnotation != null && !controllerAnnotation.iconPath().isEmpty()) { 
     metadata.setGraphic(new ImageView(controllerClass.getResource(controllerAnnotation.iconPath()).toExternalForm())); 
    } 

    FXMLLoader loader = this.createLoader(e, fxmlName, viewConfiguration); 
    Node viewNode = (Node)loader.load(); 
    ViewContext context = new ViewContext(viewNode, e, metadata, viewConfiguration, viewContextResources); 
    context.register(e); 
    context.register("controller", e); 
    this.injectFXMLNodes(context); 
    context.getResolver().injectResources(e); 
    Method[] var11 = e.getClass().getMethods(); 
    int var12 = var11.length; 

    for(int var13 = 0; var13 < var12; ++var13) { 
     Method method = var11[var13]; 
     if(method.isAnnotationPresent(PostConstruct.class)) { 
      method.invoke(e, new Object[0]); 
     } 
    } 

    return context; 
} catch (Exception var15) { 
    throw new FxmlLoadException(var15); 
} 

}

+0

Пожалуйста, покажите полные трассировки стеки, и определить строку в коде, который генерирует его. –

+0

@James_D, я обновил сообщение тем, что смог найти – Sher

+0

Невозможно сказать, не зная причины исключения, которое находится в трассировке стека. Пожалуйста, опубликуйте его. –

ответ

0

Спасибо, ошибка из-за меня не инициализируются dateFrom. Я только добавил эту часть в класс модели

public ObjectProperty<LocalDate> dateFromProperty() { 
     if(dateFrom == null){ 
      dateFrom = new SimpleObjectProperty<>(); 
     } 
     return dateFrom; 
    } 

Благодаря всем

Смежные вопросы