我是DataFX的新手(并使用DataFx8),并努力让本地化工作。我的主要课程如下所示:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
//set language
ViewConfiguration viewConfig = new ViewConfiguration();
Locale locale = new Locale("en","EN");
viewConfig.setResources(ResourceBundle.getBundle(UIConstants.LANGUAGE_BUNDLE_PREFIX, locale));
Flow applicationRootFlow = new Flow(HomeController.class, viewConfig);
FlowHandler applicationRootFlowHandler = applicationRootFlow.createHandler();
StackPane root = applicationRootFlowHandler.start(new DefaultFlowContainer());
primaryStage.setScene(new Scene(root, UIConstants.APPLICATION_WIDTH, UIConstants.APPLICATION_HEIGHT));
primaryStage.setTitle(UIConstants.APPLICATION_TITLE);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我已经跟踪了代码,调试显示Flow已成功加载资源(参见附图)。
资源具有所需的索引,但fxml没有加载字符串,而是崩溃了 引起:... javafx.fxml.LoadException:未指定资源。 / C:/.../ Home.fxml:22
fxml中的行是:
<Label fx:id="languageLabel" text="%displayLanguage" />
资源包是:
applicationTitle=Service222222
displayLanguage=English
那么我缺少什么?由于datafx的加载模型不同(控制器指定fxml文件),我是否可以直接从fxml文件进行转换?
答案 0 :(得分:3)
对于遇到此问题的其他人:
这是因为在Flow上调用createHandler()
方法时出现错误。当前的DataFx实现忽略与Flow关联的ViewConfiguration
对象,并且在返回FlowHandler
对象时将始终创建新配置(资源始终为null)。
作为解决方法,请避免调用createHandler(
)来获取FlowHandler
对象。而是通过调用将视图配置作为参数的FlowHandler
构造函数手动创建它。
applicationRootFlowHandler = new FlowHandler(applicationRootFlow, new ViewFlowContext(), viewConfig);