i18n在DataFX中,JavaFX应用程序获取LoadException:没有指定资源

时间:2016-01-04 02:39:02

标签: java javafx-8

我是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已成功加载资源(参见附图)。 enter image description here

资源具有所需的索引,但fxml没有加载字符串,而是崩溃了 引起:... javafx.fxml.LoadException:未指定资源。 / C:/.../ Home.fxml:22

fxml中的行是:

<Label fx:id="languageLabel" text="%displayLanguage" />

资源包是:

applicationTitle=Service222222
displayLanguage=English

那么我缺少什么?由于datafx的加载模型不同(控制器指定fxml文件),我是否可以直接从fxml文件进行转换?

1 个答案:

答案 0 :(得分:3)

对于遇到此问题的其他人: 这是因为在Flow上调用createHandler()方法时出现错误。当前的DataFx实现忽略与Flow关联的ViewConfiguration对象,并且在返回FlowHandler对象时将始终创建新配置(资源始终为null)。

作为解决方法,请避免调用createHandler()来获取FlowHandler对象。而是通过调用将视图配置作为参数的FlowHandler构造函数手动创建它。

applicationRootFlowHandler = new FlowHandler(applicationRootFlow, new ViewFlowContext(), viewConfig);