2014-12-07 1 views
1

Я использую Play Framework 2.2.3 с Java.Ошибка «Невозможно инициировать глобальный объект» после добавления конечной статической константы к глобальному классу

Я просто добавить константу к моему глобальному классу:

public static final String VERSION = play.application().configuration().getString("application.version"); 

Тогда я получаю эту ошибку:

play.api.PlayException: Cannot init the Global object[null] 
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:55) ~[play_2.10.jar:2.2.3] 
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:49) ~[play_2.10.jar:2.2.3] 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.2.3] 
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$globalInstance(Application.scala:48) ~[play_2.10.jar:2.2.3] 
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance$lzycompute(Application.scala:399) ~[play_2.10.jar:2.2.3] 
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance(Application.scala:399) ~[play_2.10.jar:2.2.3] 
Caused by: java.lang.ExceptionInInitializerError: null 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_65] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_65] 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_65] 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[na:1.7.0_65] 
    at java.lang.Class.newInstance(Class.java:379) ~[na:1.7.0_65] 
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$javaGlobal(Application.scala:28) ~[play_2.10.jar:2.2.3] 
Caused by: java.lang.RuntimeException: There is no started application 
    at scala.sys.package$.error(package.scala:27) ~[scala-library.jar:na] 
    at play.api.Play$$anonfun$current$1.apply(Play.scala:68) ~[play_2.10.jar:2.2.3] 
    at play.api.Play$$anonfun$current$1.apply(Play.scala:68) ~[play_2.10.jar:2.2.3] 
    at scala.Option.getOrElse(Option.scala:120) ~[scala-library.jar:na] 
    at play.api.Play$.current(Play.scala:68) ~[play_2.10.jar:2.2.3] 
    at play.api.Play.current(Play.scala) ~[play_2.10.jar:2.2.3] 

Перед мое приложение работает нормально. Если я поместил эту константу в любой другой класс, мое приложение работает нормально. Только если я поместил его в Global, я получаю эту ошибку. Любая помощь?

ответ

1

Как указано в задаче this, если вы хотите получить доступ к конфигурации во время запуска приложения, вы должны использовать метод onStart.

+0

спасибо, что пользователь3567830! Поэтому основная проблема заключается не в том, что я использую статическую конечную константу, но что я пытаюсь получить доступ к конфигурации Play во время запуска? – Kris

+0

Да, проблема не в самой константе, а в попытке доступа к конфигурации при инициализации объекта Global, чего не должно быть, поскольку инициализация объекта Global загружает конфигурацию. – edi

+0

Хорошо, но так как мне нужно, чтобы эта константа была глобальной, я должен поместить ее в какой-то другой класс, что не представляет проблемы. Спасибо, в любом случае. – Kris

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