我正在尝试使用JavaFX作为UI框架创建客户端应用程序,与Spring集成以利用现代UI,依赖注入,AOP和丰富的REST API。在我的JavaFX public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
var errors = new List<string>();
foreach (var state in actionContext.ModelState)
{
foreach (var error in state.Value.Errors)
{
errors.Add(error.ErrorMessage);
}
}
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
}
}
的{{1}}方法中,创建init()
以自动加载Application
所需的SpringApplication
个bean。这些Node
bean使用Scene
注释进行注释,并使用带有Node
注释的@Component
方法进行注释以进行初始化,并在构建后设计每个节点。现在我意识到大多数这些init()
方法都需要@PostConstruct
。我如何强制Spring在初始化这些节点时使用init()
?我可能需要在这里重构我的代码。
示例代码
JavaFX Application Thread
答案 0 :(得分:2)
现在我意识到大多数这些init()方法都需要JavaFX Application Thread。
这个假设是错误的,您可以从JavaFX应用程序线程初始化节点。
您无法修改JavaFX应用程序线程中活动场景图中的节点。但是,一旦调用了Application start()方法,您就只有一个活动的场景图,直到init()方法完成后才会发生这种情况。阅读JavaFX Application javadoc以获取更多信息。
在Application init()方法中,没有活动的场景图,无论你在任何线程上使用节点做什么都没关系,只要所有的工作都不违反任何JavaFX线程规则在场景附加到start()方法中提供的舞台之前完成。
我对此规则(对于JavaFX 8)所知道的唯一例外是WebView,必须仅从FX线程创建和访问它。
所以,我没有回答你原来的问题,但也许不需要回答。